автоопределение (необработанный) urlencode

Файл PHP получает строку в кодировке URL через GET. Однако некоторые сценарии могут отправлять строки, закодированные с urlencode() функция, в то время как другие сценарии могут отправлять строки, закодированные с rawurlencode() функция.

Что было бы лучшим способом проверить, какая функция использовалась для кодирования строки, поэтому соответствующую функцию декодирования (urldecode() или же rawurldecode()) можно назвать?

Пока что моя единственная идея — это такой код:

if (stristr($string, "%20"))...

4

Решение

Эти две функции принимают любой символ, определенный регулярным выражением [^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
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]