URL Encode/Decode

Кодирование и декодирование URL-строк. Работает в браузере.

Как закодировать и раскодировать URL онлайн

Инструмент выполняет URL-кодирование (percent-encoding) — заменяет символы, которые нельзя передать в адресе как есть, последовательностями вида %D0%BF, — и обратное преобразование. Кириллица перед кодированием переводится в UTF-8, так же как это делают современные браузеры. Всё работает в браузере: введённые данные не отправляются на сервер.

Кодирование нужно, когда вы собираете ссылку с параметрами вручную — для рекламной кампании с UTM-метками, редиректа с return_url или запроса к API. Декодирование — когда разбираете адрес из логов, отчёта аналитики или письма и хотите прочитать, что в нём написано.

Как пользоваться кодировщиком

  1. 1Выберите режим: Encode — закодировать текст, Decode — раскодировать строку с последовательностями %XX.
  2. 2Вставьте строку в поле. Для кодирования вставляйте отдельное значение параметра, а не всю ссылку: инструмент кодирует все служебные символы, включая : / ? & = и #.
  3. 3Нажмите «Encode →» или «← Decode». Если строка содержит некорректную последовательность — одиночный знак % или байты не в UTF-8, — вы увидите сообщение «Ошибка. Проверьте ввод.».
  4. 4Скопируйте результат кнопкой в правом верхнем углу поля и подставьте его в ссылку после знака = нужного параметра.
  5. 5Чтобы проверить обратное преобразование, нажмите кнопку со стрелками между режимами: она меняет направление и переносит результат в поле ввода.

Что такое URL-кодирование

По стандарту RFC 3986 в URL допустим только ограниченный набор ASCII-символов. Всё остальное передаётся как знак % и два шестнадцатеричных разряда — код байта. Символ сначала переводится в байты UTF-8: буква кириллицы занимает два байта и превращается в шесть символов, например ж → %D0%B6, а знак евро — в три байта.

Регистр шестнадцатеричных цифр не важен: %d0%b6 и %D0%B6 означают одно и то же, но стандарт рекомендует заглавные — их и выдаёт инструмент.

Как кодируются частые символы
СимволРезультатПочему кодируется
пробел%20В URL пробел недопустим; в данных HTML-форм его также пишут как +
ж%D0%B6Буква кириллицы — два байта в UTF-8
&%26Иначе будет воспринят как разделитель параметров
=%3DРазделяет имя и значение параметра
+%2BИначе сервер может прочитать его как пробел
/%2FРазделяет сегменты пути
#%23Иначе всё после него станет фрагментом и не попадёт на сервер
%%25Сам знак процента начинает закодированную последовательность
€%E2%82%ACТри байта в UTF-8

Зарезервированные и незарезервированные символы по RFC 3986

Стандарт делит допустимые символы на две группы, а всё, что в них не входит, кодируется всегда.

  • Незарезервированные: латинские буквы A–Z и a–z, цифры 0–9 и четыре знака - . _ ~. Их кодировать не нужно, а закодированный вариант считается эквивалентным.
  • Зарезервированные разделители: : / ? # [ ] @ задают структуру адреса — схему, путь, запрос и фрагмент.
  • Зарезервированные подразделители: ! $ & ' ( ) * + , ; = используются внутри частей адреса, например & и = — в строке запроса.
  • Все остальные символы — пробел, кириллица, кавычки, < > \ ^ ` { | } — передаются только в закодированном виде.

Какие символы инструмент оставляет как есть

Кодировщик работает как функция JavaScript encodeURIComponent: не трогает латиницу, цифры и символы - _ . ! ~ * ' ( ), а всё остальное кодирует. Знаки ! ' ( ) * формально зарезервированы, но в значениях параметров почти никогда не мешают. Если нужно строгое соответствие RFC 3986 — например, для подписи запросов OAuth 1.0, — замените их вручную: ! → %21, ' → %27, ( → %28, ) → %29, * → %2A.

encodeURI и encodeURIComponent: в чём разница

В JavaScript есть две функции кодирования, и путаница между ними — частая причина сломанных ссылок.

ФункцияНе кодируетДля чего
encodeURIЛатиницу, цифры, - _ . ! ~ * ' ( ) и служебные ; , / ? : @ & = + $ #Целый адрес, в котором структура уже правильная
encodeURIComponentЛатиницу, цифры, - _ . ! ~ * ' ( )Отдельное значение: параметр запроса или сегмент пути

Аналоги в других языках и подводные камни

encodeURI не защитит значение параметра, в котором есть & или =, — для этого нужна encodeURIComponent. Кроме того, encodeURI не переводит домен в Punycode: кириллический домен она закодирует процентами, и такой адрес не откроется. Домен переводят в Punycode отдельно.

  • PHP: rawurlencode() кодирует пробел как %20, urlencode() — как +.
  • Python: urllib.parse.quote() по умолчанию не кодирует /, quote_plus() заменяет пробел на +.
  • JavaScript: URLSearchParams собирает строку запроса по правилам HTML-форм — пробел превращается в +.

Пробел в URL: %20 или плюс

В пути адреса пробел записывается только как %20, а знак + там означает сам плюс. В строке запроса возможны оба варианта: формат HTML-форм application/x-www-form-urlencoded кодирует пробел как +, а настоящий плюс — как %2B. PHP, большинство веб-фреймворков и URLSearchParams при разборе запроса превращают + в пробел.

Этот инструмент, как и decodeURIComponent, плюс в пробел не превращает: строка a+b останется a+b. Если вы раскодируете данные формы, сначала замените + на пробелы. При кодировании безопаснее %20 — его одинаково понимают и в пути, и в параметрах.

Типичные ошибки URL-кодирования

Большинство проблем с кодированием сводится к нескольким повторяющимся ситуациям:

  • Двойное кодирование: уже закодированное значение прогоняют через кодировщик ещё раз, и %20 превращается в %2520. Признак — последовательности %25 в адресе.
  • Кодирование всей ссылки: https://… превращается в https%3A%2F%2F… и перестаёт открываться. Так кодировать правильно, только когда адрес передаётся значением параметра — например, redirect_uri.
  • Незакодированные & или # в значении параметра: часть значения теряется или уходит в другой параметр.
  • Старая кодировка Windows-1251: в адресах старых сайтов слово «пример» может выглядеть как %EF%F0%E8%EC%E5%F0. Это не UTF-8, поэтому декодер вернёт ошибку.
  • Кириллический домен, закодированный процентами: домен должен быть в Punycode, percent-encoding применяют только к пути и параметрам.

Частые вопросы

Как раскодировать ссылку с %D0%… в нормальный текст?

+

Выберите режим Decode, вставьте ссылку или её часть и нажмите «← Decode». Последовательности вида %D0%BF превратятся в кириллицу, а остальной текст останется как был.

Почему пробел кодируется как %20 или плюс?

+

%20 — стандартное кодирование пробела в любой части URL. Знак + используется для пробела только в данных HTML-форм формата application/x-www-form-urlencoded, то есть в строке запроса. В пути адреса + означает сам плюс.

Нужно ли кодировать весь URL?

+

Обычно нет — кодируют отдельные значения параметров и сегменты пути. Если пропустить через кодировщик всю ссылку, служебные символы :, /, ? и & тоже закодируются, и адрес перестанет работать. Целиком ссылку кодируют, только когда она сама передаётся значением параметра.

Почему возникает двойное URL-кодирование?

+

Уже закодированное значение повторно пропускают через кодировщик, и знак % превращается в %25. Обычно это происходит, когда кодирует и приложение, и библиотека HTTP-клиента — проверьте, на каком уровне выполняется преобразование, и оставьте его в одном месте.

Почему декодер выдаёт ошибку?

+

В строке есть некорректная последовательность: одиночный знак %, обрезанный код вроде %D0% или байты не в UTF-8 — например, адрес в старой кодировке Windows-1251. Такие строки нельзя однозначно перевести в текст UTF-8.

Можно ли использовать кириллицу в URL без кодирования?

+

В адресной строке и в ссылках на странице — да, браузер закодирует её сам. Но в HTTP-запросе путь и параметры всегда передаются в закодированном виде, поэтому в API-запросах, файлах sitemap и конфигурации редиректов надёжнее указывать уже закодированный адрес.

Чем encodeURI отличается от encodeURIComponent?

+

encodeURI оставляет служебные символы адреса — : / ? & = # — и подходит для целой ссылки. encodeURIComponent кодирует и их, поэтому подходит для отдельного значения параметра. Этот инструмент работает как encodeURIComponent.

Передаются ли введённые данные на сервер?

+

Нет, кодирование и декодирование выполняются в вашем браузере средствами JavaScript. Строки с токенами или персональными данными никуда не отправляются.

Связанные инструменты