kalman03

每天早上看一遍《福布斯》富翁排行榜,如果上面没有我的名字,我就去学习......
随笔 - 22, 文章 - 0, 评论 - 86, 引用 - 0
数据加载中……

地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况

HTTP标准的两种请求方式:Post和Get,关于这两种请求方式的区别相关资料云集,这里不做阐述。然而,你是否注意到:
我们通过get方式从浏览器的地址栏传递数据给服务器,当参数的值中含有某些特殊转义字符的时候,没经过些许处理将得不到预期的结果。

例如:
当我们的请求的url为:
http:
//localhost:8080/index.jsp?parameter=kalman03#kalman#1
或许你预期在服务器端获得的parameter的结果为kalman03#kalman#1,错!!!实际上得到parameter的值为kalman03。
这究竟是为什么呢?
原因:
parameter的值含有特殊字符#,浏览器自动截断#字符和其后面的值,这样得到的值就为kalman03。
推广:
当参数值中含有特殊字符 
?!=()#%& 的时候,获得的值同样也会出现与预期结果不一致的情况。
解决方案:
方法1:通过post方式传递数据;
方法2:对参数进行一次编码parameter
=escape(parameter);

第一种解决方案不解释也能明白,现在解释下第二种方法的处理:
JavaScript escape() 函数的功能是把其中某些字符替换成了十六进制的转义序列。该方法不会对ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。具体参考:http://www.w3school.com.cn/js/jsref_escape.asp.
这样来就不会出现自动截断或者其他意想不到的效果。

posted on 2009-10-17 02:04 kalman03 阅读(5210) 评论(4)  编辑  收藏 所属分类: JSP/ServletJavaScript/Css

评论

# re: 地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况  回复  更多评论   

其他所有的字符都会被转义序列替换
2009-10-18 20:25 | 乐蜂网

# re: 地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况  回复  更多评论   

最好也不包含+

例如.jsp?parameter=kalman03+kalman+1
2009-10-19 09:22 | charlie's logic

# re: 地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况  回复  更多评论   

地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况 good
2009-10-20 03:28 | 美容

# re: 地址栏(get方式)传值不能不说的秘密-当传递的值中含某些特殊字符的情况  回复  更多评论   

131
2015-08-04 17:59 | 11

只有注册用户登录后才能发表评论。


网站导航: