web-dev-qa-db-fra.com

Comment puis-je envoyer le caractère "&" (esperluette) via AJAX?

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+="&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);

La chaîne est:

 <span class="style2">&quot;Busola&quot;</span>
77
candino

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.

144
Frédéric Hamidi

Vous voudrez peut-être utiliser encodeURIComponent () .

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B
15
Wolfram

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.

8
Ned Batchelder

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.

4
Nadav S.

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 .

1
Christopher Tokar
encodeURIComponent(Your text here);

Cela tronquerait les caractères spéciaux.

0
user10164982

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

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ): 

var wysiwyg = base64_decode( $_POST['wysiwyg'] );
0
Sirko

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

OR

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

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

0
nikhilmeth