URL кодировщик и декодировщик
Для одного значения параметра или сегмента пути. Кодирует всё, кроме латинских букв, цифр и - _ . ! ~ * ' ( ), как encodeURIComponent.
Вставьте URL выше. Его части и параметры появятся здесь, их можно сразу править.
Параметры запроса
В этом URL нет параметров запроса.
Параметры фрагмента
Всё работает в вашем браузере, вставленное никуда не загружается. Это важно, ведь в URL часто есть токены и идентификаторы сессий.
URL encode и decode текста онлайн прямо во время ввода: инструмент превращает пробелы, кириллицу и символы вроде & или ? в последовательности с процентным кодированием, например %20, и возвращает им читаемый вид. Вторая вкладка разбирает URL: делит любой адрес на протокол, хост, путь и параметры запроса, которые можно править, отключать и очищать от трекинговых меток, а затем собирает правильно закодированный URL обратно. Всё происходит в вашем браузере.
Как сделать URL encode и decode текста онлайн
- Введите или вставьте текст в поле на вкладке Кодирование. Поле Результат обновляется после каждого нажатия клавиши.
- Выберите Направление. Кодировать делает текст безопасным для URL, Декодировать превращает
caf%C3%A9%20au%20laitобратно вcafé au lait. Если вставить в пустое поле текст с последовательностями вроде%20, инструмент сам переключится на Декодировать (кнопка Кодировать вместо этого вернёт всё назад). Обычный текст, который нужно кодировать, вставленный в режиме декодирования, так же переключает режим на Кодировать, а кнопка Декодировать вместо этого отменяет переключение. - При кодировании выберите в поле Кодировать как, что это за текст (см. следующий раздел). Вариант по умолчанию, Значение параметра, подходит для одного значения запроса.
- Копировать помещает результат в буфер обмена. Поменять переносит результат в поле ввода и меняет направление. Так удобно быстро проверить круговое преобразование: декодирование только что закодированного текста должно вернуть исходный.
Каждый символ, который изменил инструмент, подсвечен в результате. Наведите на него курсор, и вы увидите сам символ, его кодовую позицию 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, вставьте их в инструмент сравнения текстов и сравните по символам.