那一天,人们终于回想起了被BUG支配的恐惧
Toggle navigation
Home
AboutMe
Links
Archives
Tags
关于URL编码常见的三个错误
2018-08-26 20:58:30
533
0
0
weibo-007
# 关于URL编码常见的三个错误 ## 常见错误1 `对URL保留字符不进行编码直接作为参数传递` 这一类错误在于没有对RFC中规定的保留字符进行编码,而错误的认为只有中文才需要编码。RFC中保留的字符也不能作为参数在URL中直接传递,需要进行编码,否者将会出现意想不到的结果。 部分转换规则如下: |空格|!|#|$|%|+|@|:|=|?| |- |%20|%21|%23|%24|%25|%2B|%40|%3A|%3D|%3F| ## 常见错误2 `两次urldecode导致+号变成空格` 1. 生成一个有+号的字符串'abc+d',然后使用urlencode编码 ``` <?php $str = 'abc+d';//希望传递的字符串 $param = urlencode($str);//采用urlencode编码 $url = "http://127.0.0.1:80001/test.php?param="$param;//生成访问链接 ``` 生成的url打印出来是 `http://127.0.0.1:8001/test.php?param=abc%2Bd` 2. 使用浏览器访问url,写一个程序获取这个参数 ``` <?php $param = urldecode($_GET['param']); var_dump($param); ``` 结果收到的参数是'abc d',可以发现,+号被替换成了空格 ## 错误原因:在使用浏览器访问url链接的时候,浏览器会自动帮我们进行urldecode,这个时候php接收到的已经是'abc +d',如果再使用PHP进行urldecode一次,那么+号会被解析成空格 ## 常见错误3 `对url编码和解码使用不用版本的RFC` 这一类错误经常出现在不同系统间的交互中,同样也是+号的问题。在RFC3896协议中,空格编码为%20,而在,在PHP中有两个函数实现。 |RFC|编码函数|解码函数|空格编码|+号解码| |-|-|-| |RFC 3986|rawurlencode|rawurldecode|'+'|'+'| |RFC 3896|urlencode|urldecode|'%20'|' '| 这在不同语言交互中,或者会碰到这个坑,尤其是使用参数作为签名校验的时候。 所以,当设计参数签名校验接口文档的时候,最好能说明URL的编码使用的是哪一个RFC
Pre:
GO语言设计模式-单例模式
Next:
基础闯关记-最大子数组问题求解
0
likes
533
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Submit
Sign in
to leave a comment.
No Leanote account?
Sign up now.
0
comments
More...
Table of content
No Leanote account? Sign up now.