belun.app Блог EN

URL-кодирование: когда, зачем и как кодировать URL

Понятное руководство по процентному кодированию — что это такое, когда оно нужно и как бесплатно кодировать и декодировать URL прямо в браузере.

Browser address bar with web URL — URL encoding and decoding online

Если вы когда-нибудь видели %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-кодировщик и декодировщик умеет и то, и другое: вставьте строку — результат появится сразу. Данные никуда не отправляются, всё работает в браузере.

Попробуйте инструмент

URL-кодировщик / декодировщик →