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+="&sectiune="+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">&quot;Busola&quot;</span>
75
demandé sur Lee Taylor 2012-07-02 16:54:21

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.

139
répondu Frédéric Hamidi 2012-07-02 12:58:29

Vous pouvez utiliser encodeURIComponent().

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B
15
répondu Wolfram 2014-08-21 19:15:04

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.

7
répondu Ned Batchelder 2012-07-02 12:58:18

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.

4
répondu Nadav S. 2012-07-02 13:08:14

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.

1
répondu Christopher Tokar 2012-07-02 13:08:55

Vous pouvez encoder votre chaîne en utilisant l'encodage Base64 du côté JavaScript, puis le décoder du côté serveur avec PHP (?).

JavaScript (Docu)

var wysiwyg_clean = window.btoa( wysiwyg );

PHP (Docu):

var wysiwyg = base64_decode( $_POST['wysiwyg'] );
0
répondu Sirko 2012-07-02 12:59:01
encodeURIComponent(Your text here);

Cela tronquera les caractères spéciaux.

0
répondu user10164982 2018-08-01 09:48:18

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&param2="+encodeURIComponent('Dolce & Gabbana') 

Ou

var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos&param2="+encodeURIComponent(someValue)

Https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

0
répondu nikhil 2018-08-10 15:17:40