Как декодировать или закодировать URL
- Чтобы декодировать, вставьте URL или любой текст с %-кодами, например
%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82. Читаемый текст появится сразу: «привет». - Для полного URL вы получите и его части: протокол, хост (с записью кириллического домена в Юникоде), путь, фрагмент и таблицу всех параметров запроса, каждый раскодирован.
- Оставьте «Считать + пробелом» включённым для строк запроса и данных форм, где + означает пробел. Для другого текста, где + — это плюс, снимите галочку.
- Чтобы закодировать, выберите Кодировать, введите текст и способ: часть URL (обычный выбор для значения параметра), URL целиком, данные формы или строго по RFC 3986.
- Нажмите Копировать рядом с результатом. Если где-то стоит % без правильного кода, вы увидите его позицию.
Откуда в ссылках берутся %D0%…
В URL допустим лишь небольшой набор ASCII-символов, и у части из них есть служебная роль: / разделяет путь, ? начинает запрос, & и = разделяют параметры, # начинает фрагмент. Все остальные символы — и служебные, если они просто данные, — записываются как знак процента и две шестнадцатеричные цифры, значение одного байта. Это процентное кодирование из RFC 3986.
Пробел — байт 32, в шестнадцатеричной записи 20, поэтому он становится %20. Символы вне ASCII сначала превращаются в байты UTF-8, и каждый байт получает свой код. Любая русская буква в UTF-8 занимает два байта, поэтому «ж» превращается в %D0%B6, а слово из шести букв — в 36 символов. Вот почему ссылка, скопированная из адресной строки браузера, выглядит так: https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D1%81%D0%BA%D0%B2%D0%B0 — это всего лишь «Москва». Коды начинаются с %D0 или %D1: так в UTF-8 начинаются все буквы от «А» до «я», включая «ё» (%D1%91). Знак рубля занимает три байта (%E2%82%BD), большинство эмодзи — четыре.
Кракозябры: Windows-1251, KOI8-R и UTF-8
До UTF-8 у русского текста было несколько однобайтовых кодировок, главные — Windows-1251 (Windows и большинство старых сайтов) и KOI8-R (Unix и почта). В них каждая буква — один байт, и один и тот же байт в разных кодировках означает разные буквы. Поэтому в старых ссылках встречаются короткие коды вроде %CF%F0%E8%E2%E5%F2 — это «Привет» в Windows-1251, а в KOI8-R то же слово — %F0%D2%C9%D7%C5%D4, в UTF-8 — %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
Если байты не складываются в UTF-8, декодер читает их как Windows-1251 и пишет это в строке Кодировка. В Windows-1251 определены все 256 байтов, поэтому определить кодировку автоматически можно только «по смыслу»: если результат выглядит как бессмыслица, ссылка, скорее всего, в KOI8-R. Узнать кракозябры помогает таблица — так слово «Привет» выглядит, если байты прочитаны не в той кодировке (посчитано декодерами WHATWG, теми же, что в браузерах):
| Записано в | Прочитано как | Видим | Как узнать |
|---|---|---|---|
| UTF-8 | Windows-1251 | Привет | Самый частый случай: современный текст открыли как старый. Пары «Р», «С» через букву — верный признак. |
| Windows-1251 | KOI8-R | оПХБЕР | Регистр «перевёрнут», буквы перемешаны — так выглядели письма из старых почтовых программ. |
| KOI8-R | Windows-1251 | рТЙЧЕФ | Обратная путаница; встречается в старых архивах и логах Unix-серверов. |
| Windows-1251 | Windows-1252 | Ïðèâåò | Латиница с диакритикой вместо кириллицы — текст прочитан как западноевропейский. |
Если вы видите Привет в уже раскодированном тексте, исходные %-коды были правильными: вставьте их сюда, и декодер прочитает их как UTF-8.
encodeURIComponent, encodeURI или кодирование формы?
Четыре способа кодирования отличаются тем, какие символы оставляют как есть:
| Символ | Часть URL (encodeURIComponent) | URL целиком (encodeURI) | Данные формы | Строго по RFC 3986 | |
|---|---|---|---|---|---|
| пробел | %20 | %20 | + | %20 |
" | двойная кавычка | %22 | %22 | %22 | %22 |
# | решётка | %23 | # | %23 | %23 |
% | процент | %25 | %25 | %25 | %25 |
& | амперсанд | %26 | & | %26 | %26 |
+ | плюс | %2B | + | %2B | %2B |
/ | косая черта | %2F | / | %2F | %2F |
? | вопросительный знак | %3F | ? | %3F | %3F |
= | знак равенства | %3D | = | %3D | %3D |
! | восклицательный знак | ! | ! | %21 | %21 |
ж | русская буква | %D0%B6 | %D0%B6 | %D0%B6 | %D0%B6 |
ё | буква ё | %D1%91 | %D1%91 | %D1%91 | %D1%91 |
₽ | знак рубля | %E2%82%BD | %E2%82%BD | %E2%82%BD | %E2%82%BD |
😀 | эмодзи | %F0%9F%98%80 | %F0%9F%98%80 | %F0%9F%98%80 | %F0%9F%98%80 |
- Часть URL — функция JavaScript
encodeURIComponent. Она кодирует всё, что имеет значение в URL, поэтому результат безопасен как одно значение параметра или сегмент пути — в том числе целый URL внутри другого URL. ОставляетA–Z a–z 0–9 - _ . ! ~ * ' ( ). - URL целиком —
encodeURI. Она оставляет ещё и; , / ? : @ & = + $ #, так что адрес продолжает работать. Подходит, чтобы убрать пробелы и кириллицу из ссылки, но не для отдельного значения, в котором может оказаться&. - Данные формы — так браузер отправляет формы (
application/x-www-form-urlencoded, стандарт WHATWG URL): пробел становится+, а! ' ( ) ~тоже кодируются. Так же кодируетhttp_build_queryв PHP иurlencodeв Python. - Строго по RFC 3986 — encodeURIComponent плюс
! ' ( ) *, которые RFC 3986 резервирует. Это требуется для подписей OAuth и некоторых API.
+ или %20?
Оба варианта могут означать пробел, но только в строке запроса. Формы пишут пробел как +, поэтому поисковые ссылки выглядят как ?text=купить+чайник; RFC 3986 пишет %20, а в пути + — это просто плюс. Настоящий плюс в значении параметра передаётся как %2B. Поэтому C%2B%2B раскодируется в «C++», а номер телефона +7 в параметре без кодирования превратится в « 7» с пробелом впереди — частая причина «потерянных» плюсов в номерах.
Двойное кодирование
Когда уже закодированный текст кодируют ещё раз, каждый % превращается в %25: пробел становится %20, затем %2520. Так бывает, когда ссылка проходит через две системы, каждая из которых её кодирует, — редирект, UTM-метка, ссылка в рассылке. Декодер повторяет декодирование, пока остаются %-коды, и показывает, сколько было слоёв: у a%252520b их 3, а результат — «a b». Снимите галочку, чтобы снимать по одному слою.
Пример
В поле — поисковая ссылка интернет-магазина: 235 символа, из них 55 %-кодов в один слой. После декодирования она читается так:
https://www.example.com/search?text=купить чайник&city=Санкт-Петербург&next=/catalog?page=2#reviews
Хост — www.example.com, путь — /search. В таблице параметров 3 строки: text = «купить чайник», city = «Санкт-Петербург», next = «/catalog?page=2». Плюс в запросе стал пробелом, а каждая русская буква занимала два %-кода. Последнее значение само является путём с запросом, поэтому его /, ? и = закодированы: иначе = обрезал бы параметр раньше времени. Фрагмент #reviews на сервер вообще не отправляется.
Кириллические домены (.рф)
Домены с кириллицей передаются в ASCII-форме Punycode (RFC 3492) с префиксом xn--. Например, пример.рф — это xn--e1afmkfd.xn--p1ai; сама зона .рф всегда выглядит как xn--p1ai. Вставьте любую форму: разбор покажет хост так, как его отправляет браузер, и в Юникоде. Punycode — не процентное кодирование, поэтому домен никогда не записывается %-кодами, а вот путь и параметры на кириллическом сайте — да.
Советы и ограничения
- Кодируйте каждое значение параметра отдельно, а потом соединяйте их через
&и=. Если прогнать через encodeURIComponent всю готовую строку запроса, закодируются и разделители. - Процентное кодирование — не шифрование: раскодировать его может кто угодно. Не кладите пароли и токены в ссылки, которыми делитесь.
- Знак % без двух шестнадцатеричных цифр —
скидка 50%или обрезанный код — раскодировать нельзя; сообщение покажет его позицию. Сам процент записывается как%25. - Чтобы ссылку можно было отсканировать телефоном, сделайте из неё QR-код; ответ API из параметра удобно проверить в форматировании JSON.
Декодирование и кодирование выполняются в вашем браузере: ничего из вставленного не загружается и не сохраняется, после перезагрузки страницы поле очищается. В ссылках часто лежат токены сессий и личные данные, так что это важно.
Частые вопросы
Что означает %20 в ссылке?
Это закодированный пробел: 20 — шестнадцатеричный код символа пробела. Вставьте ссылку сюда, и все коды превратятся в читаемый текст.
Как превратить %D0%BF%D1%80… в нормальные русские буквы?
Вставьте ссылку в поле — декодер соберёт байты UTF-8 обратно в кириллицу. Каждая русская буква — это два кода, первый из которых %D0 или %D1.
Почему вместо русских букв получились кракозябры?
Текст закодирован в одной кодировке, а прочитан в другой. Короткие коды вроде %CF%F0%E8 (по одному на букву) — это Windows-1251, и декодер прочитает их сам. Если результат всё равно бессмысленный, скорее всего, это KOI8-R; сверьтесь с таблицей кракозябр выше.
Почему в ссылке %2520?
Её закодировали дважды. В первый раз пробел стал %20, во второй сам % превратился в %25. Декодер находит и снимает все слои.
Чем encodeURI отличается от encodeURIComponent?
encodeURI кодирует URL целиком и оставляет символы, которые задают его структуру: / ? & = #. encodeURIComponent кодирует одну часть — значение параметра или сегмент пути — и кодирует эти символы тоже, чтобы они не сломали URL вокруг.
Отправляется ли куда-нибудь вставленная ссылка?
Нет. Страница декодирует и кодирует с помощью JavaScript в вашем браузере, ничего не отправляет на сервер и не хранит то, что вы вставили.
Обновлено: 16 октября 2026 г.