11547 sujets

JavaScript, DOM et API Web HTML5

Bonjour !

Bon bah c'est tout bète, j'aimerais passer une chaîne de texte comportant (entre autre) des & et des + et d'autres caractères spéciaux dans le genre par XMLHTTPRequest dans vers un script php.
Le problème, c'est quand j'envoie les valeurs.
Par exemple pour une chaine
var chaine='bonjour & a+'


Pour envoyer ma chaine, je fait
xmlhttp.open("POST", "traitement.php", true);
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send("chaine="+chaine);


Dans le but de récupere ma chaine avec :
$_POST['chaine'];


Le problème, c'est que quand je fait
xmlhttp.send("chaine="+chaine);

, ca revient a faire
xmlhttp.send("chaine=bonjour & a+");


Et bah ca c'est pas bon du tout... ($_POST["chaine"] sera égal à "bonjour ")

Comment pourrais-je donc encoder ma chaine pour que ca fonctionne correctement ?
J'ai essayé la fonction escape() mais ca ne remplace pas les '+' (et peut-être d'autres caractères illégaux)... y-a-t'il un moyen ?
Modifié par AlK (27 Apr 2006 - 21:39)
Ce que tu montres est du php.
en javascript & et + sont des opérateurs alors, il faut les échapper dans une chaine :
var chaine='bonjour \& a\+'
. En php, je ne sait pas
Non ! Le seul caractère qu'il faut échapper en js, c'est le \ lui-même. Sauf dans les expressions régulières mais là c'est un autre sujet.

Que se passe-t-il si tu encodes ta chaîne ?
Je veux dire par là : utilisation de la fonction escape en js, et utilisation de la fonction urldecode en php de l'autre côté.
Le + n'est pas encodé, et malheuresement, il apparait comme un espace, même avec urldecode....
Je pourrais sans doute le remplacer par un autre caractère, mais si ca ce trouve, le + n'est pas le seul à poser problème...
la fonction "escape" n'echape pas les caracteres suivants :

* @ - _ + . /

mais seul le caracter "+" est genant car il est remplacer par un espace
il faut donc le remplacer par sont equivalent en encodage URL : "%2B"
on utilise pour cela la fonction "replace"


chaine = escape(chaine);
chaine =chaine.replace("+","%2B");

Modifié par cpartiot (10 Apr 2007 - 19:30)
Haha, heureusement que j'ai fait des recherches de mon côté ! (11 mois pour avoir une réponse lol)

Bah en fait non, on utilise la fonction encodeURIComponent(), qui encode beaucoup de caractères (dont le +...)

Piti exemple par là : http://xkr.us/articles/javascript/encode-compare/

Et c'est plus propre qu'un escape puis un replace !