我在提交发布数据时遇到问题。我有一个表单,其中有几个文本字段,当按下按钮提交数据时,它通过自定义验证(JS)运行,然后我构建一个查询字符串,如
title=test&content=some content
然后提交给服务器。我遇到的问题是我有'&' (例如& nbsp)输入其中一个输入,然后分解查询字符串。例如:
title=test&content=some content  
我如何解决这个问题?
提前致谢, 哈利。
答案 0 :(得分:2)
对每个键和值运行encodeURIComponent。
var title = "test";
var content = "some content   ";
var data = encodeURIComponent('title') + /* You don't actually need to encode this as it is a string that only contains safe characters, but you would if you weren't sure about the data */
'=' + encodeURIComponent(title) +
'&' + encodeURIComponent('content') +
'=' + encodeURIComponent(content);
答案 1 :(得分:0)
对字符串进行编码。如果要对具有特殊字符的查询字符串进行编码,则需要使用编码。 &符号编码如下
title=test&content=some content %26
查询字符串中的任何字符基本上都可以替换为其ASCII十六进制等效项,并以%作为前缀
Space = %20
A = %41
B = %42
C = %43
...
答案 2 :(得分:0)
您需要对查询进行编码,使其具有网址安全性。您可以参考以下链接,了解如何在JS中执行此操作:
http://xkr.us/articles/javascript/encode-compare/
http://www.webtoolkit.info/javascript-url-decode-encode.html
答案 3 :(得分:0)
你说:
...当按下按钮提交数据时,它会通过自定义验证(JS)运行,然后我构建一个查询字符串......
在构建查询字符串的部分中,您还应该像David Dorward建议的那样通过encodeURIComponent()运行每个输入的值。
正如您所做的那样 - 请注意,您只将新值分配给已处理的查询字符串而不是表单元素值,否则您的用户会认为他们的输入已损坏且可能会发生故障。
[编辑]
我只是重新阅读了您的问题,并意识到重要的事情:您正在编码一个& nbsp;字符。这可能是一个比这里其他海报所读到的更复杂的问题。如果你想要那个角色和其他代码;输入要转移的字符需要意识到它们是代码。那些字符&,n,b,s,p和;它本身不是“”,它是一个不会破坏的空格字符。
您必须添加另一个编码/解码步骤。您可以在发送数据之前(或“发布”)之前放置此步骤。
在: (Using this question's answers)
var data = formElement.value;
data = rhtmlspecialchars(data, 0);
用于替换“特殊”字符,例如& nbsp;使用“”,以便它们由encodeURIComponent(data)
正确编码或之后: (使用标准PHP函数)
<?PHP
$your_field_name = htmlspecialchars_decode(urldecode($_POST['your_field_name']));
?>
这假设您逃脱了&amp;在你的POST%26 如果你用encodeURIComponent()之外的一些函数替换它,你将不得不找到一种不同的方法来在PHP中解码它。
答案 4 :(得分:-1)
这可以解决您的问题:
encodeURIComponent(name)+'='+encodeURIComponent(value)+'&'+encodeURIComponent(name2)+'='+encodeURIComponent(value2)
在构建查询时,在连接它们之前,您需要转义每个值(如果您想要安全,请输入名称)。