Kei H
Kei H

Reputation: 100

what's the difference between rawurldecode() and rawurldecode(urlencode(urldecode()))

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

Answers (2)

Álvaro González
Álvaro González

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

Mr Heelis
Mr Heelis

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

Related Questions