Файл PHP получает строку в кодировке URL через GET. Однако некоторые сценарии могут отправлять строки, закодированные с urlencode()
функция, в то время как другие сценарии могут отправлять строки, закодированные с rawurlencode()
функция.
Что было бы лучшим способом проверить, какая функция использовалась для кодирования строки, поэтому соответствующую функцию декодирования (urldecode()
или же rawurldecode()
) можно назвать?
Пока что моя единственная идея — это такой код:
if (stristr($string, "%20"))...
Эти две функции принимают любой символ, определенный регулярным выражением [^0-9A-Za-z_~-]
и преобразовать его в знак процента, за которым следует шестнадцатеричный код. Единственная разница между двумя методами кодирования rawurlencode()
использует %20
для пространства, а не +
использован urlencode()
,
Для декодирования это означает, что любой последовательность, которая соответствует регулярному выражению %[0-9A-F]{2}
будет правильно декодирован или функция. Это только оставляет +
беспокоиться о том, что не будет должным образом декодирован rawurldecode()
, Итак, вы можете использовать urldecode()
на стороне сервера и не беспокойтесь ни о каком тестировании.
<?php
$str = "foo bar baz";
$raw = rawurlencode($str);
$enc = urlencode($str);
echo rawurldecode($raw);
echo rawurldecode($enc);
echo urldecode($raw);
echo urldecode($enc);
?>
Выход:
foo bar baz
foo+bar+baz
foo bar baz
foo bar baz
Других решений пока нет …