Bagaimana cara mengirim karakter “&” (ampersand) melalui AJAX?


90

Saya ingin mengirim beberapa variabel dan string dengan POSTmetode dari JavaScript.

Saya mendapatkan string dari database, dan kemudian mengirimkannya ke halaman PHP. Saya menggunakan sebuah XMLHttpRequestobjek.

Masalahnya adalah string berisi karakter &beberapa kali, dan $_POSTarray dalam PHP melihatnya seperti beberapa kunci.

Saya mencoba mengganti &dengan \&dengan replace()fungsi, tetapi sepertinya tidak melakukan apa-apa.

Adakah yang bisa membantu?

Kode javascript dan stringnya terlihat seperti ini:

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

Stringnya adalah:

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

Jawaban:


170

Anda dapat menggunakan encodeURIComponent () .

Ini akan melarikan diri dari semua karakter yang tidak dapat terjadi secara verbatim di URL:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Dalam contoh ini, karakter ampersand &akan diganti dengan escape sequence %26yang valid di URL.


Apakah ini cukup untuk keluar dari data dengan aman atau "cukup" untuk menghindari masalah ampersand?
Wottensprels

@Sprottenwels, itu cukup untuk mengenkode semua data dengan benar. Apa yang Anda maksud dengan "aman" dalam konteks ini?
Frédéric Hamidi


9

Anda perlu meng-escape url dari ampersand. Menggunakan:

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

Seperti yang ditunjukkan Wolfram, ini ditangani dengan baik (bersama dengan semua karakter khusus lainnya) oleh encodeURIComponent.


4

Jawaban Ramil Amr hanya berlaku untuk karakter &. Jika Anda memiliki beberapa karakter khusus lainnya, Anda harus menggunakan PHP htmlspecialchars() dan JS encodeURIComponent().

Kamu bisa menulis:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Dan di sisi server:

htmlspecialchars($_POST['wysiwyg']);

Ini akan memastikan bahwa AJAX akan meneruskan data seperti yang diharapkan, dan PHP (jika Anda memasukkan data ke database) akan memastikan data berfungsi seperti yang diharapkan.



1

Anda dapat menyandikan string Anda menggunakan pengkodean Base64 di sisi JavaScript dan kemudian mendekodekannya di sisi server dengan PHP (?).

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ):

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

1

Cara yang disukai adalah menggunakan pustaka JavaScript seperti jQuery dan mengatur opsi data Anda sebagai objek, lalu biarkan jQuery melakukan pengkodean, seperti ini:

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

Jika Anda tidak dapat menggunakan jQuery (yang merupakan standar saat ini), gunakan encodeURIComponent .


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.