Как закодировать и раскодировать URL онлайн
Инструмент выполняет URL-кодирование (percent-encoding) — заменяет символы, которые нельзя передать в адресе как есть, последовательностями вида %D0%BF, — и обратное преобразование. Кириллица перед кодированием переводится в UTF-8, так же как это делают современные браузеры. Всё работает в браузере: введённые данные не отправляются на сервер.
Кодирование нужно, когда вы собираете ссылку с параметрами вручную — для рекламной кампании с UTM-метками, редиректа с return_url или запроса к API. Декодирование — когда разбираете адрес из логов, отчёта аналитики или письма и хотите прочитать, что в нём написано.
Как пользоваться кодировщиком
- 1Выберите режим: Encode — закодировать текст, Decode — раскодировать строку с последовательностями %XX.
- 2Вставьте строку в поле. Для кодирования вставляйте отдельное значение параметра, а не всю ссылку: инструмент кодирует все служебные символы, включая : / ? & = и #.
- 3Нажмите «Encode →» или «← Decode». Если строка содержит некорректную последовательность — одиночный знак % или байты не в UTF-8, — вы увидите сообщение «Ошибка. Проверьте ввод.».
- 4Скопируйте результат кнопкой в правом верхнем углу поля и подставьте его в ссылку после знака = нужного параметра.
- 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. Строки с токенами или персональными данными никуда не отправляются.