Comment puis-je envoyer le caractère " & " (Esperluette) via AJAX?
Je veux envoyer quelques variables et une chaîne avec la méthode POST de JavaScript. Je reçois la chaîne de la base de données, puis l'envoie à une page PHP. J'utilise de l'objet XMLHttpRequest. Le problème est que la chaîne contient le caractère "&" quelques fois, et $ _POST array en PHP le voit comme plusieurs clés. J'ai essayé de remplacer la fonction " & " par " & " avec replace (), mais ne semble rien faire. Quelqu'un peut-il aider?
Le code javascript et la chaîne ressemblent à ce:
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);
Chaîne est:
<span class="style2">"Busola"</span>
8 réponses
Vous pouvez utiliser encodeURIComponent().
Il échappera tous les caractères qui ne peuvent pas se produire verbatim dans les URL:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Dans cet exemple, le caractère Esperluette {[1] } sera remplacé par la séquence d'échappement %26
, qui est valide dans les URL.
Vous pouvez utiliser encodeURIComponent().
encodeURIComponent(""Busola""); // => %26quot%3BBusola%26quot%3B
Vous devez url échapper à l'esperluette. Utilisation:
var wysiwyg_clean = wysiwyg.replace('&', '%26');
Comme le souligne 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, vous devriez utiliser PHP htmlspecialchars()
et JS encodeURIComponent()
.
, Vous pouvez écrire:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
Et Côté Serveur:
htmlspecialchars($_POST['wysiwyg']);
Cela s'assurera que AJAX transmettra les données comme prévu, et que PHP (au cas où vous inséreriez les données dans une base de données) s'assurera que les données fonctionnent comme prévu.
La manière préférée 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.
encodeURIComponent(Your text here);
Cela tronquera les caractères spéciaux.
Vous pouvez passer 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