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>
Candino
quelle

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.

Frédéric Hamidi
quelle
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
15

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

encodeURIComponent("&quot;Busola&quot;"); // => %26quot%3BBusola%26quot%3B
Wolfram
quelle
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.

Ned Batchelder
quelle
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.

Nadav S.
quelle
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 .

Christopher Tokar
quelle
1

Sie können Ihre Argumente mit dieser Funktion encodeURIComponent übergeben, sodass Sie sich keine Gedanken über die Übergabe von Sonderzeichen machen müssen.

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

ODER

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

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

nikhilmeth
quelle
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'] );
Sirko
quelle
0
encodeURIComponent(Your text here);

Dadurch werden Sonderzeichen abgeschnitten.

user10164982
quelle
Dies fügt den obigen Antworten keinen Wert hinzu
Ivan Kaloyanov