如何通过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+="§iune="+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">"Busola"</span>
你可以使用encodeURIComponent() 。
它将逃避所有不能在URL中逐字出现的字符:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
在这个例子中,符号字符&
将被replace为转义序列%26
,这在URL中是有效的。
你可能想使用encodeURIComponent() 。
encodeURIComponent(""Busola""); // => %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 。