Mes accents ne passent pas en POST avec escape

Signaler
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009
-
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009
-
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

Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
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 ...
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

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" ?" ?
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
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.
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

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... :-/
Messages postés
1044
Date d'inscription
lundi 7 mars 2005
Statut
Membre
Dernière intervention
13 juillet 2010
7
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)
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

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
Messages postés
132
Date d'inscription
dimanche 4 décembre 2005
Statut
Membre
Dernière intervention
3 décembre 2013
1
Bonjour, quand tu enregistres le fichier dans ton ordinateur, à "Codage" mets "UTF-8"
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

Yop DomJ,

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

Bonjour,

J'ai le même soucis que toi. As-tu trouvé la solution ?
Messages postés
35
Date d'inscription
samedi 16 août 2003
Statut
Membre
Dernière intervention
23 février 2009

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