如何通过 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+="§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);
字符串是:
<span class="style2">"Busola"</span>
【问题讨论】:
【参考方案1】:您可以使用encodeURIComponent()。
它将转义所有不能在 URL 中逐字出现的字符:
var wysiwyg_clean = encodeURIComponent(wysiwyg);
在本例中,& 符号 &
将替换为转义序列 %26
,这在 URL 中有效。
【讨论】:
这足以安全地转义数据还是“刚好”足以避免 & 号问题? @Sprotenwels,正确编码所有数据就足够了。在这种情况下,您所说的“安全”是什么意思?【参考方案2】:您可能想使用encodeURIComponent()。
encodeURIComponent(""Busola""); // => %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¶m2="+encodeURIComponent('Dolce & Gabbana')
或
var someValue = 'Dolce & Gabbana';
data: "param1=getAccNos¶m2="+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 发送“&”(和号)字符?的主要内容,如果未能解决你的问题,请参考以下文章