首页 > 解决方案 > rawurldecode() 和 rawurldecode(urlencode(urldecode())) 有什么区别

问题描述

我收到了一个包含“aaa+bbb”之类参数的获取请求,我会

得到“aaa bbb”

rawurldecode("aaa+bbb") 

但是“aaa + bbb”与

rawurldecode(urlencode(urldecode("aaa+bbb")))

我不明白, rawurldecode() 和有什么区别

rawurldecode(urlencode(urldecode()))??

谢谢你

标签: phpurldecode

解决方案


没有区别:

$a = rawurldecode("aaa+bbb");
$b = rawurldecode(urlencode(urldecode("aaa+bbb")));
var_dump($a, $b);
string(7) "aaa+bbb"
string(7) "aaa+bbb"

演示

但是,如果您尝试两种编码都不通用的字符,则会有所不同*

$a = rawurldecode("aaa%20bbb");
$b = rawurldecode(urlencode(urldecode("aaa%20bbb")));
var_dump($a, $b);
string(7) "aaa bbb"
string(7) "aaa+bbb"

演示

(*) 根据文档,rawurlencode()实现 RFC 3986,而urlencode()实现 application/x-www-form-urlencoded:

这个 [application/x-www-form-urlencoded] 与 RFC 3986 编码 [...] 的不同之处在于,由于历史原因,空格被编码为加号 (+)。


推荐阅读