url decode problem 解决方法

2015-01-24信息快讯网

今天被告诉了一个奇怪的事儿,第三方网站使用我们提供的签名是出现了错误,原因是使用php的urldecode时把加号(+) 替换成了空格

试验了一下python的urllib库以及js 的 encodeURIComponent 均不会替换。空格encode也是替换成了 '%20' 。python提供了urllib.quote_plus, urlib.unquote_plus来处理空格->加号,看起来还是比较合理的。

查了一下 RFC 3986: 有下面一段

Scheme names consist of a sequence of characters beginning with a letter and followed by any combination of letters, digits, plus ("+"), period ("."), or hyphen ("-").
RFC 2396 有下面的一段

The plus "+", dollar "$", and comma "," characters have been added to those in the "reserved" set, since they are treated as reserved within the query component.
表示加号已经是url的保留字了,不需要转义。

然后html4文档里才有关于加号的转义:

application/x-www-form-urlencoded
Forms submitted with this content type must be encoded as follows:
Control names and values are escaped. Space characters are replaced by`+', and then reserved characters.....
声明只有content-type为application/x-www-form-urlencoded时才会对+做转义。

又翻了下php的文档,发现有一个

rawurlencode() - URL-encode according to RFC 3986


也就是php又搞了rawurlencode和rawurldecode把标准实现了。。。。

不能反一下么,毕竟大部分人应该都会用urlencode。php真是蛋疼啊。。。。
深入理解require与require_once与include以及include_once的区别
深入php define()函数以及defined()函数的用法详解
CURL的学习和应用(附多线程实现)
PHP Cookie的使用教程详解
基于session_unset与session_destroy的区别详解
基于PHP CURL获取邮箱地址的详解
解析CI即CodeIgniter框架在Nginx下的重写规则
深入php函数file_get_contents超时处理的方法详解
详解PHP内置访问资源的超时时间 time_out file_get_contents read_file
基于Discuz security.inc.php代码的深入分析
php curl的深入解析
web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验
解析php中mysql_connect与mysql_pconncet的区别详解
PHP闭包(Closure)使用详解
基于curl数据采集之正则处理函数get_matches的使用
基于curl数据采集之单页面并行采集函数get_htmls的使用
PHP写UltraEdit插件脚本实现方法
最新用php获取谷歌PR值算法,附上php查询PR值代码示例
php urlencode()与urldecode()函数字符编码原理详解
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
一个PHP的QRcode类与大家分享
PHP学习散记_编码(json_encode 中文不显示)
php 转换字符串编码 iconv与mb_convert_encoding的区别说明
php空间不支持socket但支持curl时recaptcha的用法
php获取远程图片的两种 CURL方式和sockets方式获取远程图片
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
PHP 小心urldecode引发的SQL注入漏洞
PHP判断远程url是否有效的几种方法小结
©2014-2024 dbsqp.com