php的url编码和Magic Quote
来源:互联网 发布:一叶落而知秋什么意思 编辑:程序博客网 时间:2024/05/16 01:55
今天做点个小东西,生成一个随机字符串(ascii码的33-126的字符)。在通过url传递时,问题来了。
参数传递很自然的会urlencode。php接受到参数后,我做了一遍urldecode。虽然php会自动进行urldecode。不过我习惯性的做了一般。因为记得之前在哪里看过,urldecode多次执行不影响。这个可领教了,不能这么做。
原因:
浏览器和服务器对"空格"和"+"号的处理不一致。
浏览器端:浏览器对空格处理成%20,对+号不做处理。
服务器端:如果在web.xml配置了一个含有"+"号的路径,那么服务器端对提交的+号和%2B都能找到这个路径。
从浏览器的角度,按照URL编码规则,把空格编码成+号,把+号编码成%2B很容易,但从服务器来看,就不太好处理,如果收到一个含有+号的URL,到底把这个URL看成编码前的还是编码后的呢?个人感觉在这点上URL编码是有缺陷的,所以几款浏览器把URL中的空格编码成了%20,但是为什么不一鼓作气把+也编码成%2B?这样服务器不就彻底解脱了。
所以如果多次做urldecode就会将+号变成空格。当然了如果你的参数中没有+号,就无所谓了。
其实这个之前也知道,但是这次用了很多特殊字符,所以还是出问题了。
为了避免+的影响,我将随机字符改为(48-126),但是有出现了一个问题。
当字符串中有/字符时,php得到的参数中是//。
例如传递的参数为:WL?FQrC`wT/gE2Hz
服务端php得到的参数为:WL?FQrC`wT//gE2Hz
查了一下,原因是:
php默认是打开 magic_quotes_gpc。其作用是:所有的 '(单引号),"(双引号),/(反斜线)和 NULL 字符都会被自动加上一个反斜线进行转义。这和 addslashes() 作用完全相同。
所以当参数传递到server端后,自动解码,然后在magic_quotes的作用下,反斜线,被转义了。就出现上面的情况,magic_quotes之前基本了解了,但是基本不会遇到大问题,这次算是搞明白了。
在传递参数时,要先弄清楚当前的配置情况。
- php的url编码和Magic Quote
- Python2.x 利用urllib.quote实现url地址编码解码
- PHP安全的URL字符串base64编码和解码
- flash和php的url编码传换
- PHP安全的URL字符串base64编码和解码
- php和js url编码传递转换
- URL 的编码和 URL 的解码
- python url quote
- php的urlencode()URL编码函数浅析
- PHP 还原 URL 编码过后的字符串。
- php的urlencode()URL编码函数浅析
- 关于php的url中文参数编码
- PHP解析URL编码的"问题
- php的urlencode()URL编码函数浅析
- URL和URL编码
- urllib的quote处理url中的字符转义
- php escape URL 编码
- PHP json url 编码
- android UI设计秘籍
- DOS命令(2) 磁盘操作类命令
- 还思想以自由
- vb+flash 开发常见问题之--保存时出现错误:“系统错误&H80004005(-2147467259),未指定的错误”
- AutoIt界面编程_解决鼠标操作的可靠性
- php的url编码和Magic Quote
- 看图说话 – Android UI 设计秘笈 :Part I
- vc++调用MATLAB complier生成的C动态链接库(输入参数为字符类型)
- oracle卸载
- DOS命令(3) 文件操作类命令
- .net 缓存
- asp.net获取服务器IP
- 在网上搜到的题目
- 使用KEIL模板程序时遇到函数undefined symbol函数