PHP: действительно ли urlencode () безопасный способ разрешить допустимые строки UTF-8 в URL? - PullRequest
12 голосов
/ 08 января 2010

У меня есть пользовательские теги, которые могут быть любого типа (действительной) строки UTF-8. Я хочу знать, безопасно ли включать их в URL-адрес merly, выполнив их через urlencode().

Другими словами, безопасно ли использовать urlencode () для допустимых строк UTF-8? (Под действительным я имею в виду, что id уже принудительно закодировал их в UTF-8)

Ответы [ 3 ]

17 голосов
/ 23 апреля 2010

urlencode не зависит от конкретной кодировки символов. Он просто просматривает байты, интерпретирует их как символы ASCII и заменяет любой байт, который либо недопустим в ASCII (0x80–0xFF), либо недопустим в обычном виде в URL.

Теперь к вашему вопросу: Да, использование urlencode кодирует любую строку в любой кодировке символов для безопасного использования - но только в URL-запросе! Поскольку urlencode форматирует ввод в соответствии с application / x-www-form-urlencoded , что отличается от «нормального» * ​​1012 * процента кодирования тем, как это пространство закодировано: в application / x-www-form-urlencoded пробелы заменяются на +, тогда как «нормальное» кодирование процентов заменяет их на %20.

Если вы хотите использовать «нормальное» процентное кодирование, используйте rawurlencode.

0 голосов
/ 26 апреля 2010

Чтобы быть в полной безопасности, я бы сначала удалил переводы строки. Сами по себе они не опасны, но они могут стать ступеньками в использовании других уязвимостей.

0 голосов
/ 08 января 2010

Да, urlencode() должен сделать безопасную строку URL из любой входной строки. До тех пор, пока какой-либо URL-адрес сопоставляется с (folder/file/htaccess), в нем нет причудливых символов. Всякий раз, когда дезинфицирует что-то от пользователя, где он может публиковать что-то напуганное, я люблю эту функцию:

utf8_encode()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...