Wie kann ich das Zeichen "&" (kaufmännisches Und) über AJAX senden?


87

Ich möchte ein paar Variablen und einen String mit der POSTMethode aus JavaScript senden .

Ich erhalte die Zeichenfolge aus der Datenbank und sende sie dann an eine PHP-Seite. Ich benutze ein XMLHttpRequestObjekt.

Das Problem ist, dass die Zeichenfolge das Zeichen &einige Male enthält und das $_POSTArray in PHP es wie mehrere Schlüssel sieht.

Ich habe versucht, das &durch \&die replace()Funktion zu ersetzen , aber es scheint nichts zu bewirken.

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

Die Zeichenfolge lautet:

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

Antworten:


167

Sie können encodeURIComponent () verwenden .

Es werden alle Zeichen ausgeblendet, die in URLs nicht wörtlich vorkommen können:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

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


Reicht dies aus, um den Daten sicher zu entkommen, oder ist es "gerade" genug, um das kaufmännische Und-Problem zu vermeiden?
Wottensprels

@Sprottenwels, es reicht aus, alle Daten richtig zu kodieren. Was meinst du in diesem Zusammenhang mit "sicher"?
Frédéric Hamidi


9

Sie müssen dem kaufmännischen Und-URL entkommen. Verwenden:

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

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


4

Die Antwort von Ramil Amr funktioniert nur für den & Charakter. Wenn Sie andere Sonderzeichen haben, sollten Sie PHPs htmlspecialchars() und JSs verwenden encodeURIComponent().

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) sicherstellt, dass die Daten wie erwartet funktionieren.


1

Die bevorzugte Methode besteht darin, eine JavaScript-Bibliothek wie jQuery zu verwenden und Ihre Datenoption als Objekt festzulegen. Lassen Sie dann jQuery die Codierung wie folgt ausführen:

$.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 .



0

Sie können Ihre Zeichenfolge mithilfe der Base64-Codierung auf der JavaScript-Seite und anschließend auf der Serverseite mit PHP (?) Codieren.

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ):

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.