Je veux envoyer quelques variables et une chaîne avec la POST
méthode de JavaScript.
J'obtiens la chaîne de la base de données, puis je l'envoie à une page PHP. J'utilise un XMLHttpRequest
objet.
Le problème est que la chaîne contient le caractère &
plusieurs fois et que le $_POST
tableau en PHP le voit comme plusieurs clés.
J'ai essayé de remplacer le &
par \&
par la replace()
fonction, mais cela 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>
la source
Vous voudrez peut-être utiliser encodeURIComponent () .
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
la source
Vous devez échapper à l'url de l'esperluette. Utilisation:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Comme le souligne Wolfram, cela est bien géré (avec tous les autres caractères spéciaux) par encodeURIComponent.
la source
La réponse de Ramil Amr ne fonctionne que pour le caractère &. Si vous avez d'autres caractères spéciaux, vous devez utiliser PHP
htmlspecialchars()
et JSencodeURIComponent()
.Tu peux écrire:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Et côté serveur:
htmlspecialchars($_POST['wysiwyg']);
Cela garantira que AJAX transmettra les données comme prévu, et que PHP (au cas où vous insérez les données dans une base de données) s'assurera que les données fonctionnent comme prévu.
la source
Vous pouvez transmettre vos arguments en utilisant cette fonction encodeURIComponent afin de ne pas avoir à vous soucier de passer des caractères spéciaux.
data: "param1=getAccNos¶m2="+encodeURIComponent('Dolce & Gabbana')
OU
var someValue = 'Dolce & Gabbana'; data: "param1=getAccNos¶m2="+encodeURIComponent(someValue)
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
la source
Vous pouvez encoder votre chaîne en utilisant l'encodage Base64 côté JavaScript, puis la décoder côté serveur avec PHP (?).
JavaScript ( Docu )
var wysiwyg_clean = window.btoa( wysiwyg );
PHP ( Docu ):
var wysiwyg = base64_decode( $_POST['wysiwyg'] );
la source
Le moyen préféré est d'utiliser une bibliothèque JavaScript telle que jQuery et de définir votre option de données en tant qu'objet, puis de laisser jQuery faire l'encodage, comme ceci:
$.ajax({ type: "POST", url: "/link.json", data: { value: poststr }, error: function(){ alert('some error occured'); } });
Si vous ne pouvez pas utiliser jQuery (qui est à peu près la norme de nos jours), utilisez encodeURIComponent .
la source
encodeURIComponent(Your text here);
Cela tronquera les caractères spéciaux.
la source