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

IT技术 javascript ajax string post xmlhttprequest
2021-01-19 19:57:16

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

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

问题是字符串&多次包含该字符,而$_POSTPHP 中数组将其视为多个键。

我试着更换&\&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>
6个回答

您可以使用encodeURIComponent()

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

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在此示例中,与号字符&将替换为转义序列%26,这在 URL 中有效。

@Sprottenwels,对所有数据进行正确编码就足够了。在这种情况下,您所说的“安全”是什么意思?
2021-03-19 19:57:16
这足以安全地转义数据还是“刚好”足以避免&符号问题?
2021-03-26 19:57:16

您可能想要使用encodeURIComponent()

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

您需要对&符号进行网址转义。利用:

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

正如 Wolfram 指出的那样,encodeURIComponent 很好地处理了这一点(以及所有其他特殊字符)。

Ramil Amr 的回答仅适用于 & 字符。如果你有其他一些特殊字符,你应该使用 PHPhtmlspecialchars() JS 的encodeURIComponent().

你可以写:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在服务器端:

htmlspecialchars($_POST['wysiwyg']);

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

您可以使用此 encodeURIComponent 函数传递参数,因此您不必担心传递任何特殊字符。

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') 

或者

var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent