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

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

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

Ответ 1

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

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

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

Ответ 2

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

utf8_encode()

Ответ 3

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