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


89

我想使用POSTJavaScript中的方法发送一些变量和一个字符串。

我从数据库中获取字符串,然后将其发送到PHP页面。我正在使用一个XMLHttpRequest对象。

问题在于该字符串&多次包含该字符$_POST,PHP中的数组将其视为多个键。

我试着更换&\&replace()功能,但它似乎并没有做任何事情。

有人可以帮忙吗?

javascript代码和字符串如下所示:

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

字符串是:

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

Answers:


169

您可以使用encodeURIComponent()

它将转义URL中不能逐字出现的所有字符:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在此示例中,&字符&将由转义序列替换,该转义序列%26在URL中有效。


这是否足以安全地转义数据,或者“正好”足以避免“&”号问题?
Wottensprels,2014年

@Sprottenwels,足以正确编码所有数据。在这种情况下,“安全地”是什么意思?
弗雷德里克·哈米迪


9

您需要url转义与号。使用:

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

正如Wolfram所指出的,这可以通过encodeURIComponent很好地处理(以及所有其他特殊字符)。


4

Ramil Amr的答案仅适用于&字符。如果您还有其他特殊字符,则应使用PHPhtmlspecialchars() JS encodeURIComponent()

你可以写:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在服务器端:

htmlspecialchars($_POST['wysiwyg']);

这将确保AJAX将按预期传递数据,并且PHP(以防您将数据插入数据库)将确保数据按预期运行。


1

您可以在JavaScript端使用Base64编码对字符串进行编码,然后在服务器端使用PHP(?)对其进行解码。

JavaScript(文档

var wysiwyg_clean = window.btoa( wysiwyg );

PHP(Docu):

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

1

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

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

如果您不能使用jQuery(目前几乎是标准的),请使用encodeURIComponent



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.