В чем смысл rawurldecode() и urldecode (), когда браузер, по-видимому, делает это автоматически?

#php #browser #get #urldecode

Вопрос:

Я не могу сказать вам, сколько часов своей жизни я потратил впустую на такого рода идиотские ошибки.

Я в основном создаю URL-адрес, такой как: https://example.com/?test=' . urlencode('meow foo@gmail.com');

Затем я показываю его с URL-адреса, вот так: echo urldecode($_GET['test']);

И тогда это показывает: meow foo@gmail.com .

Тьфу.

Если бы я вместо этого сделал это: echo $_GET['test'];

Я получаю: meow foo@gmail.com .

(Естественно, повторять такую переменную GET-это безумие, поэтому я бы, конечно htmlspecialchars , обошел ее в реальности. Но я здесь не об этом.)

Итак, поскольку браузеры (или что-то в этом роде) явно выполняют этот «перевод» или «декодирование» автоматически, повторное выполнение приводит к путанице, удаляя определенные символы, в данном случае » » (плюс). Что наводит меня на мысль, что я вообще не должен использовать urldecode / rawurldecode .

Но тогда почему они существуют?

Комментарии:

1. Руководство PHP по $_GET утверждениям: The GET variables are passed through urldecode().

2. @PaulT. Так когда же кто-нибудь захочет их использовать?

3. Я не знаю , использовал ли я когда-либо rawurldecode , но использовал urldecode сторонние API, в которых применялась кодировка.

Ответ №1:

Так когда же кто-нибудь захочет их использовать

Недавно у меня был случай, когда мы добавили триггеры в корзину S3, которые были подобраны лямбда-функцией и отправлены через HTTP-запрос в конечную точку API.

Если бы путь к файлу на S3 был многословным, он заменил бы пробел на a , и в этот момент он нарушил бы наш код, потому что технически путь неверен.

Как только вы запустите его, urldecode он станет допустимым путем, потому что в соответствии с документами:

Декодирует любую кодировку %## в данной строке. Символы плюс (» «) декодируются в символ пробела.

Это было бы допустимым вариантом использования этой функции, поскольку браузер не задействован. Просто фоновые процессы/запросы.