AJAX ile "&" (ve işareti) karakterini nasıl gönderebilirim?


92

Birkaç değişken ve bir dize göndermek istiyorum. POSTJavaScript'ten yöntemle .

Dizeyi veritabanından alıyorum ve ardından bir PHP sayfasına gönderiyorum. Ben kullanıyorumXMLHttpRequest nesne .

Sorun, dizenin karakteri &birkaç kez içermesi ve$_POST PHP'deki dizinin onu birden çok anahtar gibi görmesidir.

Ben yerine çalıştı &ile \&birlikte replace()fonksiyonu, ancak hiçbir şey görünmüyor.

Biri yardım edebilir mi?

Javascript kodu ve dize şuna benzer:

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

Dize:

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

Yanıtlar:


171

EncodeURIComponent () kullanabilirsiniz .

URL'lerde kelimesi kelimesine bulunamayan tüm karakterlerin çıkışını sağlar:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Bu örnekte, ve işareti karakteri &, %26URL'lerde geçerli olan çıkış dizisi ile değiştirilecektir .


Bu, verilerden güvenli bir şekilde kaçmak için yeterli mi, yoksa "sadece" "ve işareti" sorunundan kaçınmak için yeterli mi?
Wottensprels

@Sprottenwels, tüm verileri doğru şekilde kodlamak yeterlidir. Bu bağlamda "güvenli" derken neyi kastediyorsunuz?
Frédéric Hamidi


9

Ve işaretinden url-çıkış yapmanız gerekir. Kullanım:

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

Wolfram'ın da işaret ettiği gibi, bu (diğer tüm özel karakterlerle birlikte) encodeURIComponent tarafından iyi bir şekilde ele alınır.


4

Ramil Amr'ın cevabı sadece & karakteri için geçerlidir. Başka özel karakterleriniz varsa, PHP htmlspecialchars() ve JS'leri kullanmalısınız encodeURIComponent().

Yazabilirsin:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

Ve sunucu tarafında:

htmlspecialchars($_POST['wysiwyg']);

Bu, AJAX'ın verileri beklendiği gibi aktarmasını ve PHP'nin (verileri bir veritabanına eklemeniz durumunda) verilerin beklendiği gibi çalışmasını sağlar.



1

Dizinizi JavaScript tarafında Base64 kodlamasını kullanarak kodlayabilir ve ardından PHP (?) İle sunucu tarafında çözebilirsiniz.

JavaScript ( Docu )

var wysiwyg_clean = window.btoa( wysiwyg );

PHP ( Docu ):

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

1

Tercih edilen yol, jQuery gibi bir JavaScript kitaplığı kullanmak ve veri seçeneğinizi bir nesne olarak ayarlamak, ardından jQuery'nin şu şekilde kodlamayı yapmasına izin vermektir:

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

JQuery'yi (bugünlerde hemen hemen standart olan) kullanamıyorsanız, encodeURIComponent kullanın .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.