В чем разница между rawurldecode () и rawurldecode (urlencode (urldecode ())) - PullRequest
0 голосов
/ 09 мая 2018

Я получил запрос на получение, который содержит параметр типа "aaa + bbb", я буду

получить "ААА BBB" с

rawurldecode("aaa+bbb") 

но "aaa + bbb" с

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

Я не понимаю, в чем разница между rawurldecode () и

rawurldecode (UrlEncode (urldecode ())) ??

спасибо

Ответы [ 2 ]

0 голосов
/ 09 мая 2018

Нет никакой разницы:

$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"

( demo )

(*) В соответствии с документами rawurlencode () реализует RFC 3986, а urlencode () реализует application / x-www-form-urlencoded:

This [application / x-www-form-urlencoded] отличается от кодировки RFC 3986 [...] тем, что по историческим причинам пробелы кодируются как знаки плюс (+).

0 голосов
/ 09 мая 2018

вы не получаете "ааа bbb" с rawurldecode("aaa+bbb") вы получаете "ааа + bbb" (вы имели в виду urldecode("aaa+bbb")?)

echo rawurldecode("aaa+bbb") . "<br>\n";

ааа + bbb

echo urldecode("aaa+bbb"). "<br>\n";
echo urlencode(urldecode("aaa+bbb")). "<br>\n";
echo rawurldecode(urlencode(urldecode("aaa+bbb"))). "<br>\n";

ААА BBB

ААА + BBB

ААА + BBB

...