it-swarm.com.de

Wie kann ich das Zeichen "&" über AJAX senden?

Ich möchte ein paar Variablen und einen String mit der Methode POST von JavaScript aus senden. Ich erhalte den String aus der Datenbank und sende ihn dann an eine PHP -Seite. Ich verwende das XMLHttpRequest-Objekt ..__ Das Problem ist, dass die Zeichenfolge das Zeichen "&" einige Male enthält, und das $ _POST-Array in PHP sieht es wie mehrere Schlüssel . mit "\ &" mit replace () - Funktion, scheint aber nichts zu tun . Kann jemand helfen?

Der Javascript-Code und die Zeichenfolge sehen folgendermaßen aus:

    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);

String ist:

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

Sie können encodeURIComponent () verwenden.

Es wird allen Zeichen entgehen, die nicht wortwörtlich in URLs vorkommen können:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

In diesem Beispiel wird das kaufmännische Und-Zeichen & durch die Escape-Sequenz %26 ersetzt, die in URLs gültig ist.

144

Möglicherweise möchten Sie encodeURIComponent () verwenden.

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

Sie müssen dem kaufmännischen Und-Zeichen entgehen. Benutzen:

var wysiwyg_clean = wysiwyg.replace('&', '%26');

Wie Wolfram herausstellt, wird dies (zusammen mit allen anderen Sonderzeichen) von encodeURIComponent gut gehandhabt.

8
Ned Batchelder

Die Antwort von Ramil Amr funktioniert nur für das Zeichen &. Wenn Sie andere Sonderzeichen haben, sollten Sie die htmlspecialchars() und JS von encodeURIComponent() von PHP verwenden.

Du kannst schreiben:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Und auf der Serverseite:

htmlspecialchars($_POST['wysiwyg']);

Dadurch wird sichergestellt, dass AJAX die Daten wie erwartet weitergibt und dass PHP (falls Sie die Daten in eine Datenbank einfügen) sicherstellen wird, dass die Daten wie erwartet funktionieren.

4
Nadav S.

Die bevorzugte Methode ist die Verwendung einer JavaScript-Bibliothek wie jQuery und das Festlegen Ihrer Datenoption als Objekt. Lassen Sie dann jQuery die Kodierung wie folgt vornehmen:

$.ajax({
  type: "POST",
  url: "/link.json",
  data: { value: poststr },
  error: function(){ alert('some error occured'); }
});

Wenn Sie jQuery nicht verwenden können (was heutzutage so ziemlich der Standard ist), verwenden Sie encodeURIComponent .

1
encodeURIComponent(Your text here);

Dadurch werden Sonderzeichen abgeschnitten.

0
user10164982

Sie können Ihre Zeichenfolge mithilfe der Base64-Codierung auf der JavaScript-Seite kodieren und dann auf der Serverseite mit PHP (?) Dekodieren.

JavaScript ( Doku )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Doku ): 

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

Sie können Ihre Argumente mit dieser Funktion encodeURIComponent übergeben, damit Sie keine Sonderzeichen übergeben müssen.

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