URL-кодирование: когда, зачем и как кодировать URL
Понятное руководство по процентному кодированию — что это такое, когда оно нужно и как бесплатно кодировать и декодировать URL прямо в браузере.
Если вы когда-нибудь видели %20 в URL там, где должен быть пробел, вы сталкивались с процентным кодированием. Штука, которую разработчики используют постоянно — и при этом редко задумываются о ней, пока что-нибудь не сломается из-за неправильного применения.
Что такое URL-кодирование?
URL может содержать только ограниченный набор ASCII-символов. Пробелы, амперсанды, знаки равенства, слэши и всё, что выходит за пределы ASCII, — кириллица, иероглифы, эмодзи — в сырых URL недопустимы. Процентное кодирование переводит их в безопасный формат: знак % и двузначный шестнадцатеричный код байта.
Несколько примеров:
- Пробел →
%20 &→%26=→%3D/→%2Fа(U+0430, кириллица) →%D0%B0(два байта UTF-8)- 😀 (U+1F600) →
%F0%9F%98%80(четыре байта)
Кириллица, иероглифы и эмодзи занимают несколько байт в UTF-8, поэтому превращаются в несколько %XX-последовательностей подряд.
encodeURI против encodeURIComponent
Именно здесь чаще всего путаются — в том числе опытные разработчики.
encodeURI кодирует URL целиком. Он оставляет нетронутыми структурные символы — ?, &, =, /, # — потому что они часть синтаксиса URL.
encodeURIComponent кодирует один компонент: значение параметра запроса, сегмент пути, фрагмент. Он кодирует в том числе ?, &, = и / — внутри компонента они ничего не значат структурно и сломают URL, если оставить их как есть.
Простое правило: используйте encodeURIComponent, когда вставляете значение в URL. encodeURI — только если собрали полный URL и хотите обезопасить его целиком.
Наш URL-кодировщик использует encodeURIComponent по умолчанию — это правильный выбор для самого частого случая: кодирования значения параметра запроса.
Когда кодирование действительно нужно
Значения параметров запроса. ?q=привет мир должно быть ?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80. Пробел ломает парсинг.
Сегменты пути со спецсимволами. Файл отчёт 2026.pdf в URL нужно закодировать — иначе браузер или сервер прочтёт имя неправильно.
URL внутри URL. Если передаёте адрес редиректа как параметр запроса, внутренний URL нужно закодировать полностью: ?redirect=https%3A%2F%2Fexample.com%2Fpath. Иначе парсер перепутает ? и & внутреннего адреса с внешними.
Букмарклеты и javascript: URL. Любое динамическое значение нужно кодировать перед вставкой.
Когда кодировать не нужно
Структурные части URL — https://, ?, &, =, / между сегментами пути, # — кодировать не надо. Закодируете их — URL перестанет работать.
Декодирование URL при отладке
Когда вы получаете что-то вроде https://api.example.com/search?q=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82, декодируйте — и сразу увидите исходный запрос. Удобно при разборе логов или вебхук-пейлоадов.
URL-кодировщик и декодировщик умеет и то, и другое: вставьте строку — результат появится сразу. Данные никуда не отправляются, всё работает в браузере.