Mes accents ne passent pas en POST avec escape

guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009 - 26 juin 2007 à 17:54
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009 - 23 févr. 2009 à 15:25
Hello à tous,

j'ai un petit souci avec l'utilisation d'AJAX et ASP.NET (C#) :

quand j'envoie des données au serveur en POST via AJAX, mes accents (notamment) ne passent pas et côté serveur, il n'y a rien à la place (pas de ?, ni le code %xx qui aurait dû remplacer l'accent suite à l'utilisation de la fonction escape)

si j'envoie les données en GET, je n'ai pas ce problème...

si ne n'utilise pas escape, j'ai bien mes accents côté serveur mais par contre, ça plante pour les caractères comme & qui sont interprétés... (d'où l'utilisation de escape)

J'ai essayé différents charset utf-8, ISO-machin, ... mais ça ne change rien.

Avez-vous déjà rencontré ce genre de problème ?

Voici mon code côté client :

parameters += "&var=" + escape("testé")

//ouverture de la page côté serveur via l'objet ajax

xmlHttp.open("POST","EmployeeDB.aspx",true);

//indication dans l'en-tête de la page qu'il y a des infos passées en POST

xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//ajout de la taille des paramètres envoyés en POST dans l'en-tête

xmlHttp.setRequestHeader("Content-length", parameters.length);

//envoi des paramètres en POST 

xmlHttp.send(parameters);

Et côté serveur, je récupère comme ceci (sVar contient 'test' sans l'é de fin et sans rien à la place, ni espace, ni autre):

string sVar = Request.Params["var"].ToString();

10 réponses

Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
27 juin 2007 à 05:48
Plusieurs possibilités :

J'ai jamais utiliser, le content-length avec AJAX, je doute que ce soit utile et que cela change quelque chose à tes requêtes. À tu essayer sans, à tu essayé avec une autre chaîne du genre "requêtes" ?

Le problème peut aussi être à cause du traitement que ASP. Net fait par défault sur tes paramètre GET et POST. Et dieux c'est qu'il en fait du traitement pour prendre autant de temps à générer des pages ...
0
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
27 juin 2007 à 09:46
Yop Arto,

d'abord merci pour ta réponse. :-)

J'ai viré le content-length et ça fonctionne aussi sans en effet mais ça ne résoud pas mon problème.

Que veux-tu dire par "à tu essayé avec une autre chaîne du genre "requêtes" ?" ?
0
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
27 juin 2007 à 19:30
Le content-length fait que le serveur arrête de lire le contenu après X caractère(s). Dans ta chaîne de test c'est le dernier caractère qui ne se rend pas au serveur. Donc, j'ai cru que c'était juste le dernier caractère qui était cropper et non les caractères avec des accents, d'oû "requêtes", car l'accent se trouve au milieu. Si le problème est seulement avec le content-length seulement "requête" va être lu par le serveur, s'il est avec l'accent seulement "requtes" va être lu par le serveur.

Sinon j'ai l'impression que c'est "parametres.length + 1" que tu dois mettre pour le content-length au lieu de "parametres.length". J'ai une petite idée de pourquoi ASP aurait se comportement, mais c'est un peu complexe comme truc.

C'est probablement à cause de fait que tout les chaines de caractère ont un byte null à la fin.
0
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
28 juin 2007 à 09:15
Re :)

Ca ne vient de là, si je mets 12 accents au milieu de ce que j'envoie (teéèéééèèst), il reçoit test... On dirait qu'il n'aime pas les %xx qui sont générés par escape pour convertir les caractères spéciaux... :-/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Arto_8000 Messages postés 1044 Date d'inscription lundi 7 mars 2005 Statut Membre Dernière intervention 13 juillet 2010 7
28 juin 2007 à 16:08
Dernier petit essaie pour comprendre, ta variable qui reçoit tes paramètres, elle est signé ou pas ? Un string signé ne peut prendre que les caractères ASCII de 0 à 127 et les accents se trouvent après le 127.

Essaie en déclarant tes string non signé (unsigned)
0
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
28 juin 2007 à 16:11
Re,

je doute que ce soit cela vu que tout passe bien sans faire un escape côté javascript.

Bon, je vais contourner en ne faisant pas d'escape mais en remplaçant les caractères qui pourraient poser problème (comme &) par le code correspondant (%26 pour &). En faisant comme ça, ça fonctionne mais j'trouve pas ça très propre. Donc si quelqu'un trouve une solution, je suis toujours preneur.

Merci Arto pour ton aide.

Tchuss
0
cs_DomJ Messages postés 132 Date d'inscription dimanche 4 décembre 2005 Statut Membre Dernière intervention 3 décembre 2013 1
1 juil. 2007 à 03:44
Bonjour, quand tu enregistres le fichier dans ton ordinateur, à "Codage" mets "UTF-8"
0
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
2 juil. 2007 à 09:11
Yop DomJ,

c'est le cas (j'ai aussi essayé d'autres formats pour voir si ça changeait quelque chose mais nada...).
0
logirard Messages postés 1 Date d'inscription vendredi 6 février 2009 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 15:07
Bonjour,

J'ai le même soucis que toi. As-tu trouvé la solution ?
0
guepard53 Messages postés 35 Date d'inscription samedi 16 août 2003 Statut Membre Dernière intervention 23 février 2009
23 févr. 2009 à 15:25
Salut,
comme je disais plus haut, en faisant un replace des caractères posant problèmes par le code hexa correspondant (& --> %26, ...). Je n'utilise plus escape qui aurait dû faire ce travail tout seul...

J'me suis donc fait une petite fonction myEscape() moi-même.

guepard
0
Rejoignez-nous