POST数据问题

时间:2011-04-22 17:04:38

标签: javascript html

我在提交发布数据时遇到问题。我有一个表单,其中有几个文本字段,当按下按钮提交数据时,它通过自定义验证(JS)运行,然后我构建一个查询字符串,如

title=test&content=some content

然后提交给服务器。我遇到的问题是我有'&' (例如& nbsp)输入其中一个输入,然后分解查询字符串。例如:

title=test&content=some content &nbsp 

我如何解决这个问题?

提前致谢, 哈利。

5 个答案:

答案 0 :(得分:2)

对每个键和值运行encodeURIComponent

var title = "test";
var content = "some content &nbsp ";
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)

在构建查询时,在连接它们之前,您需要转义每个值(如果您想要安全,请输入名称)。

  • JavaScript全局函数encodeURIComponent()执行转义。
  • 全局函数escape()(DOM)在浏览器中为您执行此操作。虽然人们说它并没有为unicode chars做好准备。无论如何,如果你只关心'&amp;'那么这可以解决你的问题。