Reputation: 100
I have received a get request which contains a parameter like "aaa+bbb", I will
get "aaa bbb" with
rawurldecode("aaa+bbb")
but "aaa+bbb" with
rawurldecode(urlencode(urldecode("aaa+bbb")))
I don't understand it, what's the difference between rawurldecode() and
rawurldecode(urlencode(urldecode()))??
thank you
Upvotes: 2
Views: 3145
Reputation: 146330
There's no difference with your test data:
$a = rawurldecode("aaa+bbb");
$b = rawurldecode(urlencode(urldecode("aaa+bbb")));
var_dump($a, $b);
string(7) "aaa+bbb" string(7) "aaa+bbb"
(demo)
There is a difference though if you try the only character that is not common to both encodings*:
$a = rawurldecode("aaa%20bbb");
$b = rawurldecode(urlencode(urldecode("aaa%20bbb")));
var_dump($a, $b);
string(7) "aaa bbb" string(7) "aaa+bbb"
(demo)
(*) As per the docs, rawurlencode() implements RFC 3986 while urlencode() implements application/x-www-form-urlencoded:
This [application/x-www-form-urlencoded] differs from the RFC 3986 encoding [...] in that for historical reasons, spaces are encoded as plus (+) signs.
Upvotes: 3
Reputation: 2546
you don't get "aaa bbb" with rawurldecode("aaa+bbb")
you get "aaa+bbb" (did you mean urldecode("aaa+bbb")
?)
echo rawurldecode("aaa+bbb") . "<br>\n";
aaa+bbb
echo urldecode("aaa+bbb"). "<br>\n";
echo urlencode(urldecode("aaa+bbb")). "<br>\n";
echo rawurldecode(urlencode(urldecode("aaa+bbb"))). "<br>\n";
aaa bbb
aaa+bbb
aaa+bbb
Upvotes: 1