[接口传值]request.getParameter("变量名")获取的字符串中原来的加号变成了空格,url传值。此时往往会出现没说需要urlencode带来的系列问题。

jackxiang 2013-7-15 16:07 | |
      今天我在调程序时,遇到了见郁闷的事,我用ajax从前台显示页面传字符串变量给处理页面,出现了件怪事,我想传的内容是abc+,但接收以后用System.out.println()输出是abc空格。反复测试好几遍,都是这个结果,真是令人郁闷。在网上搜了搜,找到了原因。
原因:   url中有些字符被转义,比如空格被编码成加号,于是传的参数明明是加号,获取的值却成了空格。如何解决呢?如果是通过url传递参数,应该对其进行必要的编码。
解决办法:
在javascript中加入  

对字符串进行处理.如:var str=URLencode("abc+")


综上,即url里有如下四个特殊字符时:(1)加号:+    (2)双引号:"    (3)单引号:'    (4)斜杠:/时,既要进行特殊处理。


搞自:http://www.blogjava.net/juhongtao/archive/2009/07/31/168639.html
更多参考:http://blog.csdn.net/aragorn_177/article/details/2612974

背景:
对方部门给一接中,没说明是urlencode直接给一个get参数过来,于是对生成的+这样的,通过get后没了,变成了空格(特别是指浏览器里),
于是得这样:


输出:
---------- 调试PHP ----------
x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8+KhXTZlA4rQ6rmpDczbbxGfsZj+J1tC+R9hH
x3LCVymudOXKl40YwZledetlpbOmC0wS823N3tptZ54JeWS38pInvk3VkRBzTXyJvqSCd9JZHTgfnRsguGyjI4p5ejA8%2BKhXTZlA4rQ6rmpDczbbxGfsZj%2BJ1tC%2BR9hH

输出完成 (耗时 0 秒) - 正常终止


最后,其实通过测试,Curl命令行里也会对+进行urldecode进行了转码后变成了空格后进入到PHP程序变量里,于是加号没了,这种情况要想加号还在,得先通过工具urlencode一把,再传入也就出来加号了Ok了,后再一次urlencode一把就变成了%2B的+了:
相当于想通过浏览器传入urlencode的%2B,则需要在浏览器里输入对对+进行编码为%2B的码,后浏览器解码一次,还原成+号后,再编码,也就是原来输入的编码了,串还是那个串,传入编码后的被解开,再被编码的一个过程。

常常在post进行发送时用的是:

在此时,这个函数相当于一个urlencode功能,它有一个默认的参数:
int $enc_type = PHP_QUERY_RFC1738
如果 enc_type 是 PHP_QUERY_RFC1738,则编码将会以 » RFC 1738 标准和 application/x-www-form-urlencoded 媒体类型进行编码,空格会被编码成加号(+)。
-----------------------------------------
同样,那个+会变成%2B,呵呵。

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/6529/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-7-15 17:59
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]