URL-кодирование
URL-кодирование представляет байт в компоненте URI знаком процента и двумя шестнадцатеричными цифрами.
Определение
URL-кодирование, точнее процентное кодирование, представляет байт знаком % и двумя шестнадцатеричными цифрами. Например, пробел можно записать как %20, а сам знак процента — как %25.
Незарезервированные символы URI — латинские буквы ASCII, цифры, -, ., _ и ~ — обычно не меняются. Необходимость кодировать остальные символы зависит от их позиции и роли в URI.
Как это работает
Текст вне ASCII сначала преобразуют в байты, обычно в UTF-8, а затем нужные байты кодируют по отдельности. Поэтому café в UTF-8 превращается в caf%C3%A9.
Зарезервированные символы /, ?, #, & и = задают структуру URL. Их обработка зависит от того, находятся данные в сегменте пути, параметре запроса, фрагменте или другом компоненте.
Пробелы и данные форм
Обычное процентное кодирование записывает пробел как %20. Формат application/x-www-form-urlencoded, применяемый в строках запроса и HTML-формах, часто обозначает пробел знаком +; буквальный плюс тогда записывают как %2B.
Библиотеки обычно предоставляют отдельные функции для полного URL, сегмента пути и значения параметра. Функция для конкретного компонента не даст ошибочно скрыть или сохранить структурные разделители.
Безопасность и частые ошибки
URL-кодирование обратимо и не является шифрованием. Конфиденциальные значения могут остаться в истории браузера, журналах, данных Referer и записях сервера.
Повторное кодирование знака процента создаёт двойное кодирование: %20 становится %2520. Декодированные данные всё равно нужно проверять, поскольку кодирование не обезвреживает вредоносный или некорректный ввод.
%20 — процентная запись байта пробела. Знак + означает пробел именно в кодировании данных форм; в другом контексте он может быть обычным плюсом.
Обычно нет. Сегменты пути и значения параметров кодируют функциями для соответствующего компонента, чтобы структурные разделители сохранили смысл.
Нет. Оно обеспечивает синтаксическую совместимость, но не даёт конфиденциальность, целостность или аутентичность.