Je souhaite envoyer quelques variables et une chaîne avec la méthode POST à partir de JavaScript. Je récupère la chaîne dans la base de données, puis l'envoie à une page PHP. J'utilise l'objet XMLHttpRequest . Le problème est que la chaîne contient plusieurs fois le caractère "&" et que le tableau $ _POST entre PHP le voit comme plusieurs clés . avec "\ &" avec la fonction replace (), mais ne semble rien faire . Quelqu'un peut-il aider?
Le code javascript et la chaîne ressemblent à ceci:
var wysiwyg = dijit.byId("wysiwyg").get("value");
var wysiwyg_clean = wysiwyg.replace('&','\&');
var poststr = "act=save";
poststr+="&titlu="+frm.value.titlu;
poststr+="§iune="+frm.value.sectiune;
poststr+="&wysiwyg="+wysiwyg_clean;
poststr+="&id_text="+frm.value.id_text;
xmlhttp.open("POST","lista_ajax.php",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(poststr);
La chaîne est:
<span class="style2">"Busola"</span>
Vous pouvez utiliser encodeURIComponent () .
Il échappera à tous les caractères qui ne peuvent pas figurer textuellement dans les URL:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Dans cet exemple, le caractère esperluette &
sera remplacé par la séquence d'échappement %26
, qui est valide dans les URL.
Vous voudrez peut-être utiliser encodeURIComponent () .
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
Vous devez url-échapper à l'esperluette. Utilisation:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Comme le fait remarquer Wolfram, ceci est bien géré (avec tous les autres caractères spéciaux) par encodeURIComponent.
La réponse de Ramil Amr ne fonctionne que pour le caractère &. Si vous avez d'autres caractères spéciaux, utilisez htmlspecialchars()
de PHP et encodeURIComponent()
de JS.
Tu peux écrire:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Et du côté du serveur:
htmlspecialchars($_POST['wysiwyg']);
Cela garantira que AJAX transmettra les données comme prévu et que PHP (si vous insérez les données dans une base de données) s'assurera que les données fonctionnent comme prévu.
La méthode préférée consiste à utiliser une bibliothèque JavaScript telle que jQuery et à définir votre option de données en tant qu'objet, puis laissez jQuery effectuer l'encodage, comme suit:
$.ajax({
type: "POST",
url: "/link.json",
data: { value: poststr },
error: function(){ alert('some error occured'); }
});
Si vous ne pouvez pas utiliser jQuery (ce qui est à peu près la norme de nos jours), utilisez encodeURIComponent .
encodeURIComponent(Your text here);
Cela tronquerait les caractères spéciaux.
Vous pouvez transmettre vos arguments en utilisant cette fonction encodeURIComponent afin de ne pas avoir à vous soucier de transmettre des caractères spéciaux.
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
OR
var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent