URL кодировщик и декодировщик

Acrafto Team Разработчики
Обновлено
Кодировать как

Для одного значения параметра или сегмента пути. Кодирует всё, кроме латинских букв, цифр и - _ . ! ~ * ' ( ), как encodeURIComponent.

Результат

Всё работает в вашем браузере, вставленное никуда не загружается. Это важно, ведь в URL часто есть токены и идентификаторы сессий.

URL encode и decode текста онлайн прямо во время ввода: инструмент превращает пробелы, кириллицу и символы вроде & или ? в последовательности с процентным кодированием, например %20, и возвращает им читаемый вид. Вторая вкладка разбирает URL: делит любой адрес на протокол, хост, путь и параметры запроса, которые можно править, отключать и очищать от трекинговых меток, а затем собирает правильно закодированный URL обратно. Всё происходит в вашем браузере.

Как сделать URL encode и decode текста онлайн

  1. Введите или вставьте текст в поле на вкладке Кодирование. Поле Результат обновляется после каждого нажатия клавиши.
  2. Выберите Направление. Кодировать делает текст безопасным для URL, Декодировать превращает caf%C3%A9%20au%20lait обратно в café au lait. Если вставить в пустое поле текст с последовательностями вроде %20, инструмент сам переключится на Декодировать (кнопка Кодировать вместо этого вернёт всё назад). Обычный текст, который нужно кодировать, вставленный в режиме декодирования, так же переключает режим на Кодировать, а кнопка Декодировать вместо этого отменяет переключение.
  3. При кодировании выберите в поле Кодировать как, что это за текст (см. следующий раздел). Вариант по умолчанию, Значение параметра, подходит для одного значения запроса.
  4. Копировать помещает результат в буфер обмена. Поменять переносит результат в поле ввода и меняет направление. Так удобно быстро проверить круговое преобразование: декодирование только что закодированного текста должно вернуть исходный.

Каждый символ, который изменил инструмент, подсвечен в результате. Наведите на него курсор, и вы увидите сам символ, его кодовую позицию Unicode и байты, например é U+00E9 %C3%A9. Под полями отображаются счётчики Символов, Байтов UTF-8 и Закодировано символов (или Декодировано символов). Попробовать пример загружает фразу Скидка 50 %, кофе & круассаны? Да!, в которой 34 символа, но 55 байтов UTF-8, потому что каждая русская буква занимает два байта, а пробелы, цифры и знаки препинания по одному.

При кодировании Каждая строка отдельно кодирует каждую строку независимо и сохраняет переводы строк, что удобно для списка значений или ссылок. Без этой опции перевод строки тоже кодируется и превращается в %0A. Если текст оказался URL с параметрами, инструмент предложит Разобрать на части, и адрес откроется на вкладке разбора.

Как закодировать параметр URL, весь URL или данные формы

Кодировать все символы везде не нужно. Слэш разделяет папки в пути, но внутри значения параметра это обычные данные, поэтому правильный результат зависит от того, что именно вы кодируете. В поле Кодировать как есть четыре режима.

  • Значение параметра работает как encodeURIComponent в JavaScript и подходит для одного значения запроса или сегмента пути. Он кодирует всё, кроме латинских букв, цифр и - _ . ! ~ * ' ( ), поэтому &, =, / или ? внутри значения не сломают URL. Текст café & crème превращается в caf%C3%A9%20%26%20cr%C3%A8me, и его можно сразу подставлять после q=.
  • Весь URL нужен для готового адреса, который только требуется привести в порядок. Режим кодирует пробелы, символы не из ASCII (в том числе кириллицу), управляющие символы, обратный апостроф и " < > \ ^ { | }, а всё, что задаёт структуру URL, оставляет как есть: : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Так https://example.com/search?q=café au lait&lang=fr превращается в https://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Уже закодированные последовательности не меняются, а одиночный % становится %25. Этим режим отличается от encodeURI в JavaScript, который превращает существующий %20 в %2520 и кодирует скобки IPv6-адреса вроде http://[2001:db8::1]:8080/.
  • Данные формы следуют формату application/x-www-form-urlencoded (на английском), который создают HTML-формы и URLSearchParams. Пробел становится +, а без кодирования остаются только латинские буквы, цифры и * - . _, поэтому ! ' ( ) ~ тоже кодируются.
  • Строго по RFC 3986 оставляет без кодирования только незарезервированные символы из RFC 3986 (на английском): латинские буквы, цифры и - . _ ~. OAuth 1.0 (RFC 5849) и AWS Signature Version 4 требуют именно такой вид, потому что подпись совпадает, только если обе стороны одинаково кодируют ! и *.

Одни и те же символы в каждом режиме:

СимволЗначение параметраВесь URLДанные формыСтрого по RFC 3986
пробел%20%20+%20
&%26&%26%26
/%2F/%2F%2F
+%2B+%2B%2B
~~~%7E~
!!!%21%21
****%2A
é%C3%A9%C3%A9%C3%A9%C3%A9

Текст всегда кодируется как UTF-8, а шестнадцатеричные цифры всегда пишутся заглавными. Если во вводе уже есть последовательности вроде %20, появится заметка об этом с кнопкой Декодировать вместо этого, чтобы вы случайно не закодировали текст дважды.

Чтобы передать JSON в параметре запроса, сожмите его в форматтере JSON и закодируйте как Значение параметра: {"id":7,"tags":["a","b"]} превращается в %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Работает и в обратную сторону: декодируйте параметр здесь, а затем отформатируйте его там.

Проблемы с URL decode: плюсы, %2520 и битые последовательности

Декодирование обычно проходит без сюрпризов, но в четырёх случаях люди спотыкаются. Инструмент обрабатывает каждый из них, а не останавливается с ошибкой.

  • Плюс означает пробел в данных формы и в большинстве строк запроса. Опция + как пробел при декодировании включена по умолчанию, поэтому caf%C3%A9+au+lait декодируется в café au lait. В целом URL пробелами считаются только плюсы после ?, потому что в пути плюс остаётся обычным символом. Отключите опцию, если плюс нужен как плюс. Плюс, закодированный как %2B, всегда остаётся плюсом.
  • Двойное кодирование возникает, когда два слоя кода кодируют одно и то же значение, и RFC 3986 прямо предостерегает от этого. Каждый % превращается в %25, поэтому пробел из %20 становится %2520. Если в декодированном результате всё ещё есть последовательности вроде %20, инструмент сообщает, что текст, вероятно, закодировали дважды, и предлагает Декодировать ещё раз.
  • Неверная последовательность, то есть % без двух шестнадцатеричных цифр после него, как в 100% или %G1, заставляет decodeURIComponent в JavaScript выбросить ошибку URIError. Здесь такие последовательности остаются как есть, выделяются красным и подсчитываются, а остальной текст декодируется.
  • Старые ссылки в Latin-1 остались со времён до UTF-8, когда некоторые сайты кодировали é одним байтом %E9. caf%E9 не является корректным UTF-8, поэтому decodeURIComponent падает, а unquote в Python возвращает caf и символ замены U+FFFD. Инструмент читает такие байты как Windows-1252, декодирует caf%E9 в café и добавляет заметку об этом.

Управляющие символы в декодированном тексте, например табуляция или нулевой байт, показаны видимыми значками вроде ␉ и ␀, но Копировать копирует настоящий текст.

Разбор URL: как разделить адрес и править параметры запроса

Вставьте адрес в поле URL на вкладке Разбор и правка URL, и он разделится на Протокол, Хост, Порт, Путь и Фрагмент, а также на Имя пользователя и Пароль, если они есть в URL. Значения показаны в декодированном виде, поэтому вкладка заодно служит самым быстрым способом декодировать параметры URL: вы читаете беговые кроссовки вместо %D0%B1%D0%B5%D0%B3%D0%BE%D0%B2%D1%8B%D0%B5+%D0%BA%D1%80%D0%BE%D1%81%D1%81%D0%BE%D0%B2%D0%BA%D0%B8. Править можно в обе стороны, как строку адреса и таблицу параметров в Postman. Измените поле, и URL тут же перепишется с правильным кодированием; измените URL, и все части прочитаются заново. Части, которых вы не касались, остаются в точности такими же, символ в символ.

В таблице Параметры запроса перечислены все параметры с колонками Имя и Значение. Снимите галочку Включить в URL, чтобы исключить параметр, не удаляя его: это помогает искать тот единственный параметр, который ломает запрос. Кнопки Добавить параметр, Удалить параметр и Сортировать от А до Я делают то, что написано. Повторяющиеся имена вроде tag=a&tag=b и имена без значения вроде ?debug сохраняются. Параметр Пробелы в параметрах определяет, как записываются пробелы: как %20 или как +; по умолчанию он повторяет вставленный URL.

Ссылки для входа и оплаты часто содержат второй URL внутри параметра, закодированный так, чтобы его ? и & не смешивались с внешними:

https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2

Если значение само является URL, обычно в redirect_uri, return, url или next, рядом появляется кнопка Править вложенный URL. Внутренний адрес https://app.example.com/callback?tab=2 открывается отдельным уровнем со своими частями и параметрами, путь из ссылок (Основной URL › redirect_uri) ведёт обратно, а каждое изменение кодируется и записывается во внешний URL. Копировать основной URL копирует результат. Это работает на нескольких уровнях вложенности.

Если часть после # похожа на параметры, как #access_token=...&state=... в неявном потоке OAuth или #/search?q=shoes в маршрутах одностраничных приложений, их перечисляет вторая таблица, Параметры фрагмента.

Парсер указывает и на проблемы: URL без протокола, который браузеры считают относительной ссылкой; порт вне диапазона от 0 до 65535; символы, которые нужно кодировать, такие как пробелы, кириллица, " или <, что исправляет кнопка Закодировать. Текст без адреса, например a=1&b=2, читается как строка запроса. Для интернационализированного доменного имени инструмент показывает форму Punycode, которую используют DNS и браузеры, так что münchen.de превращается в xn--mnchen-3ya.de, а домен, начинающийся с xn--, получает читаемую форму.

Копировать URL копирует готовый адрес, Открыть открывает его в новой вкладке (только ссылки http и https), а Копировать как JSON выдаёт параметры в виде объекта JSON, где повторяющиеся имена собраны в массив.

Как убрать UTM-метки и другие трекинговые параметры из URL

Ссылки из рассылок, рекламы и соцсетей несут параметры, которые лишь сообщают сайту, откуда пришёл посетитель. UTM-метки utm_source, utm_medium, utm_campaign, utm_term и utm_content восходят к Urchin, предшественнику Google Analytics. Идентификаторы кликов вроде fbclid (Facebook), gclid (Google Ads) и msclkid (Microsoft Advertising) добавляют сами платформы.

Парсер помечает их тегом трекинг, а Убрать метки (n) удаляет их все сразу. Кроме любых параметров utm_*, он распознаёт больше 20 других, например ttclid (TikTok), mc_cid (Mailchimp) и _hsenc (HubSpot). Параметры, нужные странице, остаются на месте: в ссылке на магазин из Попробовать пример кнопка Убрать метки (4) удаляет utm_source, utm_medium, utm_campaign и fbclid, а q, size, return и фрагмент #reviews сохраняет.

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

Что такое процентное кодирование и как символы превращаются в %XX

Percent-encoding (на английском), оно же URL encoding, записывает символ как % и две шестнадцатеричные цифры. В URL допустим лишь ограниченный набор символов ASCII, и у некоторых из них есть роль: ? начинает запрос, & разделяет параметры, # начинает фрагмент. RFC 3986 называет их зарезервированными символами (: / ? # [ ] @ и ! $ & ' ( ) * + , ; =). Латинские буквы, цифры и - . _ ~ называются незарезервированными символами, и кодировать их не нужно. Всё остальное, а также любой зарезервированный символ, используемый как обычные данные, кодируется.

Символы вне ASCII сначала превращаются в байты UTF-8, и каждый байт получает собственный %XX:

  • é это U+00E9, который UTF-8 хранит как два байта C3 A9, поэтому получается %C3%A9.
  • € это U+20AC, три байта: %E2%82%AC.
  • Эмодзи вроде U+1F600 (улыбающееся лицо) занимает четыре байта: %F0%9F%98%80.

%c3%a9 и %C3%A9 означают одно и то же, но RFC 3986 рекомендует заглавные буквы, их и пишет инструмент. Таблица процентного кодирования символов, которые встречаются чаще всего:

СимволКодСимволКод
пробел%20+%2B
!%21,%2C
"%22/%2F
#%23:%3A
$%24;%3B
%%25=%3D
&%26?%3F
'%27@%40
(%28[%5B
)%29]%5D
*%2Aперевод строки%0A

URL encode в JavaScript, Python и PHP

В каждом языке есть для этого функции, и различаются они в основном тем, как обращаются с пробелами, слэшами и символами ! ' ( ) * ~.

В JavaScript есть encodeURIComponent для значения, encodeURI для целого адреса и URLSearchParams для кодирования формы:

encodeURIComponent("café & crème")                     // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café")            // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString()  // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9")                        // "café"

decodeURIComponent не превращает + в пробел и выбрасывает URIError при неверной последовательности вроде 100%.

В Python функции находятся в urllib.parse. quote по умолчанию сохраняет / (safe='/') и кодирует всё, кроме незарезервированных символов RFC 3986. quote_plus записывает пробелы как + и кодирует / тоже:

from urllib.parse import quote, quote_plus, urlencode, unquote_plus

quote("café & crème/brûlée")       # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="")            # 'a%20b%2Fc'
quote_plus("café & crème/brûlée")  # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2})  # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait")  # 'café au lait'

В PHP urlencode кодирует так же, как HTML-форма, и записывает пробел как +, а rawurlencode следует RFC 3986 и записывает %20:

urlencode("café & crème");     // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème");  // "caf%C3%A9%20%26%20cr%C3%A8me"

rawurlencode даёт тот же результат, что и Строго по RFC 3986. urlencode совпадает с режимом Данные формы, кроме *, которую он кодирует как %2A.

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

Как кодировать пробел в URL: %20 или +?

%20 работает в URL везде. + означает пробел только в строке запроса и в данных формы, то есть в формате, который отправляют HTML-формы. В пути + это обычный плюс, поэтому /a+b остаётся /a+b. Если в значении запроса нужен настоящий плюс, пишите его как %2B. В инструменте режим Данные формы записывает пробелы как +, а остальные три режима как %20.

Что означают %20, %2F и %3D в URL?

Это закодированные символы: %20 это пробел, %2F слэш, а %3D знак равенства. Часто встречаются и %26 (&), %3F (?), %3A (:), %2C (запятая) и %27 (апостроф). Две цифры это код символа в шестнадцатеричной системе. Буквы с диакритикой, кириллица и другие символы вне ASCII занимают от двух до четырёх таких пар, например %C3%A9 для é. Вставьте всю строку в декодер, чтобы прочитать её.

В чём разница между encodeURI и encodeURIComponent?

encodeURI предназначена для целого адреса и не трогает символы, задающие его структуру, такие как : / ? # & =. encodeURIComponent предназначена для одной части, значения параметра или сегмента пути, и кодирует и эти символы тоже, поэтому https://example.com/?a=1&b=2 превращается в https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. В этом инструменте режим Значение параметра соответствует encodeURIComponent, а Весь URL похож на encodeURI, но сохраняет существующие последовательности вроде %20, а не превращает их в %2520.

Как убрать UTM-метки из ссылки?

Вставьте ссылку на вкладку Разбор и правка URL и нажмите Убрать метки (n). Кнопка сразу удалит все теги utm_* и идентификаторы кликов вроде fbclid и gclid. Затем нажмите Копировать URL. Чтобы убрать только часть меток, нажмите Удалить параметр в ненужных строках.

URL encoding это то же самое, что шифрование или Base64?

Нет. URL encoding ничего не скрывает: любой может декодировать caf%C3%A9 обратно в café, поэтому он не защищает ни пароль, ни токен. Он лишь делает символы безопасными для использования в адресе. Base64 это другая кодировка, которая превращает любые данные, в том числе двоичные файлы, в строку из 64 символов. Строку Base64 в URL всё равно нужно закодировать (+, / и =), если не использовать вариант URL safe, который умеет создавать кодировщик и декодировщик Base64.

Загружаются или сохраняются ли вставленные URL?

Нет. Кодирование, декодирование и разбор выполняются в вашем браузере, и ничего из вставленного не отправляется на сервер. Это важно, потому что в URL часто есть токены доступа, идентификаторы сессий или коды сброса пароля. Браузер запоминает только выбранную вкладку и параметры, но никогда не тексты. Адрес загружает лишь кнопка Открыть, которая открывает его в новой вкладке, как обычный переход по ссылке.

Ещё инструменты для программистов собраны в категории Разработчики, а инструменты, которые превращают один формат в другой, в категории Конвертеры. Чтобы найти, чем отличаются два длинных URL, например рабочий и сбойный вызов API, вставьте их в инструмент сравнения текстов и сравните по символам.

Я был бы признателен, если бы вы поделились этими страницами с друзьями, сохранили их в закладках или ссылались на них. Спасибо! 🙏