如何通过AJAX发送“&”(&符)字符?

我想从JavaScript发送一些variables和POST方法的string。 我从数据库中获取string,然后将其发送到PHP页面。 我正在使用XMLHttpRequest对象。 问题是该string包含字符“&”几次,PHP中的$ _POST数组看起来像多个键。 我尝试用replace()函数replace“&”,但似乎没有做任何事情。 谁能帮忙?

JavaScript代码和string如下所示:

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是:

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

你可以使用encodeURIComponent() 。

它将逃避所有不能在URL中逐字出现的字符:

 var wysiwyg_clean = encodeURIComponent(wysiwyg); 

在这个例子中,符号字符&将被replace为转义序列%26 ,这在URL中是有效的。

你可能想使用encodeURIComponent() 。

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

你需要url转义符号。 使用:

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

正如沃尔夫勒姆指出的那样,encodeURIComponent可以很好地处理(以及所有其他特殊字符)。

Ramil Amr的答案只适用于&angular色。 如果你有其他的特殊字符,你应该使用PHP的htmlspecialchars() JS的encodeURIComponent()

你可以写:

 var wysiwyg_clean = encodeURIComponent(wysiwyg); 

而在服务器端:

 htmlspecialchars($_POST['wysiwyg']); 

这将确保AJAX将按预期传递数据,并且PHP(如果您将数据粘贴到数据库)将确保数据按预期工作。

你可以在JavaScript端使用Base64编码来编码你的string,然后用PHP(?)在服务器端解码。

JavaScript( Docu )

 var wysiwyg_clean = window.btoa( wysiwyg ); 

PHP( Docu ):

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

首选的方法是使用JavaScript库(如jQuery),并将数据选项设置为对象,然后让jQuery执行编码,如下所示:

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

如果你不能使用jQuery(这几乎是标准),使用encodeURIComponent 。