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
Чтобы быть полностью в безопасности, я сначала удалял новые строки. Они не опасны сами по себе, но они могут стать шагами в использовании других уязвимостей.