我正在使用 Zend 框架。我有一个包含一些字段的表单,所有这些字段,type="text"
包括一个名为“电话”的输入。提交时,我使用 Ajax 将数据发送到控制器。那么这是我的问题,如果我输入一个+
符号,例如:
+34-666666666
我收到的数据是34-666666666
. 该+
符号变成一个空格。这个问题只发生在+
,我已经尝试了所有的符号,没有问题。我快疯了,我在 Google 中没有找到任何解决方案。
问问题
1761 次
2 回答
3
该+
符号在 URL 中用于表示空格。您的 ajax 提交可能正在执行 GET 请求,并且+
URL 字符串中的 正在被转换。在提交 ajax 请求之前通过 javascript 清理您的输入encodeURIComponent()
。
您可能还会发现这个问题很有用:URL 中的加号字符转换为 linux 盒子上的空格。
这个问题讨论encodeURIComponent
:如何在 Javascript 中编码 URL?
于 2012-06-14T08:40:41.633 回答
3
您需要按照此处所述对 GET/POST 数据进行编码。encodeURIComponent
稍加改动即可使用JavaScript函数*:
对于 application/x-www-form-urlencoded (POST),根据规范,空格将被替换为“+”,因此可能希望在 encodeURIComponent 替换之后再将“%20”替换为“+”。
"&phone=" + encodeURIComponent("+34-666666666").replace(/%20/, "+"); // "&phone=%2B34-666666666"
"&phone=" + encodeURIComponent("+34-666666666 x123").replace(/%20/, "+"); // "&phone=%2B34-666666666+x123"
*注意:对+
URL 中字符的处理取决于它是在路径组件还是查询字符串中使用:
http://example.com/page+1
- 文件名page+1
http://example.com/page%201
- 文件名page 1
http://example.com/?file=page+1
-- 查询字符串参数file=page 1
http://example.com/?file=page%201
-- 查询字符串参数file=page 1
于 2012-06-14T08:44:52.227 回答