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

Posted

技术标签:

【中文标题】如何通过 AJAX 发送“&”(和号)字符?【英文标题】:How can I send the "&" (ampersand) character via AJAX? 【发布时间】:2012-07-02 21:25:54 【问题描述】:

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

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

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

我尝试将& 替换为\&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>

【问题讨论】:

【参考方案1】:

您可以使用encodeURIComponent()。

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

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在本例中,& 符号 &amp; 将替换为转义序列 %26,这在 URL 中有效。

【讨论】:

这足以安全地转义数据还是“刚好”足以避免 & 号问题? @Sprotenwels,正确编码所有数据就足够了。在这种情况下,您所说的“安全”是什么意思?【参考方案2】:

您可能想使用encodeURIComponent()。

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

【讨论】:

【参考方案3】:

您需要对 & 符号进行 url 转义。使用:

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

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

【讨论】:

【参考方案4】:

Ramil Amr 的答案仅适用于 & 字符。如果你还有一些特殊字符,你应该使用PHP的htmlspecialchars()JS的encodeURIComponent()

你可以写:

var wysiwyg_clean = encodeURIComponent(wysiwyg);

在服务器端:

htmlspecialchars($_POST['wysiwyg']);

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

【讨论】:

【参考方案5】:

您可以使用此 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

【讨论】:

【参考方案6】:

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

JavaScript (Docu)

var wysiwyg_clean = window.btoa( wysiwyg );

PHP (Docu):

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

【讨论】:

【参考方案7】:

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

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

如果您不能使用 jQuery(这几乎是当今的标准),请使用 encodeURIComponent。

【讨论】:

【参考方案8】:
encodeURIComponent(Your text here);

这将截断特殊字符。

【讨论】:

这不会为上述答案增加任何价值

以上是关于如何通过 AJAX 发送“&”(和号)字符?的主要内容,如果未能解决你的问题,请参考以下文章

C++ 成员函数重载与 &(和号)

在这种情况下,&(和号)符号是啥意思?

和号在函数调用中是什么意思?

如何通过ajax请求将字符串与文件一起发送到php文件?

和号(&)(非常命令执行)与 QProcess

如何使用 ASP.NET MVC 通过 Ajax 将检查的行发送到服务器?