ToolActToolAct

Кодировщик/Декодировщик URL

Быстрое URL кодирование и декодирование с поддержкой различных режимов кодирования

Ввод
Символов: 0
Байт: 0
Результат
Символов: 0
Байт: 0

Выберите способ преобразования

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

URL-кодирование (также называемое процентным кодированием) — это механизм преобразования символов в формат, который может быть безопасно передан в URL. Поскольку URL могут содержать только определённые символы набора ASCII, другие символы (такие как кириллица, пробелы и специальные символы) должны быть закодированы в формате %XX, где XX — шестнадцатеричное значение символа. Например: пробел кодируется как %20, а буква «Д» кодируется как %D0%94. URL-encoding преобразует символы в форму, безопасную для передачи внутри URL. Пробелы, non-ASCII текст, reserved characters и специальные символы percent-encode в зависимости от контекста. Важно различать полный URL, path segment, query parameter, form body и fragment, потому что правила escaping разные. Двойное кодирование или его отсутствие может сломать ссылки, API requests, signatures, redirects и поисковые параметры.

Как пользоваться

Как пользоваться

  1. Введите или вставьте текст для кодирования/декодирования в поле ввода
  2. Выберите метод кодирования: encodeURIComponent или encodeURI
  3. Результаты появляются автоматически; доступно копирование или обмен ввода/вывода одним нажатием
  4. Для декодирования выберите соответствующий метод

Контекст URL

  • Используйте кодирование компонентов для значений параметров запроса и сегментов пути: кодирование всего URL неправильной функцией может сломать разделители вроде /, ? и &.
  • При декодировании проверяйте двойное кодирование, например %2520 — это означает, что символ процента был закодирован повторно.

Применение

Безопасное кодирование параметров запросаИспользуйте режим encodeURIComponent, когда значение будет размещено внутри параметра запроса URL, сегмента пути или form-подобной нагрузки. Он кодирует зарезервированные символы агрессивнее, чем encodeURI, и показывает количество символов и байтов. Результат — то, что большинство серверных парсеров ожидает после знака вопроса или внутри сегмента JSON Pointer.
Кодирование и декодирование целых URLПереключитесь на encodeURI или decodeURI при работе с полным URL, когда нужно сохранить структурное значение разделителей : / ? &. Режимы компонентного и полного URI разделены, чтобы избежать случайного чрезмерного кодирования. Это правильный выбор, когда входные данные уже выглядят как URL и нужно ужать только пользовательские части.
Восстановление читаемого текста из процентных экранированийДекодируйте компонентные или полные URI-строки и обменяйте корректный вывод обратно в поле ввода с помощью противоположного режима. Ошибки трансформации от некорректных процентных последовательностей отображаются в выводе и блокируют обмен, что не допускает попадания неполного %XX в последующий копипаст. Дважды закодированные фрагменты вроде %2520 проявятся как вложенные экранирования, требующие повторной раскодировки.
Анализ закодированных form-bodyПереключитесь в представление application/x-www-form-urlencoded, чтобы увидеть, чем '+' отличается от '%20' для пробелов, затем декодируйте form-body, скопированный из DevTools, чтобы восстановить исходные ключи. Это также помогает при чтении тела POST-запроса, чтобы убедиться, что форма действительно отправила то, что задумывал клиентский JavaScript. RFC 3986 предусматривает отдельное правило для form-body, поэтому '+' сохраняется во многих API.
Различение зарезервированных и незарезервированных символов по RFC 3986При отладке несовпадения подписи или ошибки 400 от строгого API первым шагом проверьте, находится ли каждый байт в наборе зарезервированных (gen-delims : / ? # [ ] @ и sub-delims !$&'()*+,;=) или незарезервированных (A-Z a-z 0-9 - . _ ~). Значения параметров запроса используют percent-encoding для зарезервированных символов, а сегменты пути трактуют '/' как структурный. Выбор %20 для пробелов или '+' для form-body напрямую зависит от того, где будет размещено закодированное значение, поэтому одна и та же строка может легально появиться в трёх разных кодировках в зависимости от слота URL.

Технический принцип

URL-кодирование (процентное кодирование) определено в RFC 3986 §2.1 и преобразует символы в формат %XX, где XX — двузначное верхнее шестнадцатеричное представление значения байта в UTF-8. RFC определяет два класса символов: незарезервированные (A-Z a-z 0-9 - _ . ~), которые никогда не кодируются, и зарезервированные (общие разделители : / ? # [ ] @ и вспомогательные разделители ! $ & ' ( ) * + , ; =), кодирование которых зависит от контекста — они несут структурный смысл в некоторых компонентах URL, но являются буквальными данными в других. JavaScript предоставляет две встроенные функции с разным охватом. encodeURIComponent() кодирует каждый символ, кроме A-Z a-z 0-9 - _ . ! ~ * ' ( ) — это правильный выбор для кодирования отдельных значений параметров запроса, сегментов пути и идентификаторов фрагмента. encodeURI() дополнительно сохраняет структурные символы : / ? # [ ] @ ! $ & ' ( ) * + , ; = и предназначена для кодирования целых URI с сохранением их синтаксической структуры. Ключевое различие в том, что encodeURIComponent() кодирует / и &, что сломает URL при применении к целой строке, тогда как encodeURI() сохраняет их. Обработка пробелов — самая частая ловушка совместимости. RFC 3986 указывает %20 как каноническое процентное кодирование символа пробела (U+0020). Однако MIME-тип application/x-www-form-urlencoded (используемый при отправке HTML-форм с HTML 4.01) кодирует пробелы как +. Они не взаимозаменяемы: сервер, ожидающий %20, интерпретирует + буквально, а сервер, ожидающий +, трактует %20 как буквальный знак процента, за которым следует 20. Инструмент использует encodeURIComponent(), который выдаёт %20, что соответствует RFC 3986. При декодировании нагрузок x-www-form-urlencoded (из тел POST или строк запроса, разобранных устаревшими промежуточными слоями) следует учитывать эту разницу. Обработка многобайтовых символов выполняется автоматически, но требует понимания: входная строка сначала кодируется в байты UTF-8, затем каждый байт индивидуально кодируется процентным кодированием. CJK-символ, например «你» (U+4F60), занимает 3 байта UTF-8 (E4 BD A0), что даёт %E4%BD%A0. Если сервер разбирает с другой кодировкой, например GBK, тот же символ кодируется как %C4%E3 (2 байта), и декодированный результат будет искажён, если обе стороны не договорились о UTF-8. Двойное кодирование — другая распространённая ошибка: %2520 означает буквальный знак процента (%25), за которым следует 20, что указывает на повторное процентное кодирование уже закодированного ввода. Режим декодирования обнаруживает некорректные последовательности (неполные %XX) и выводит ошибку, а не генерирует мусор молча.

  • encodeURIComponent и encodeURI: encodeURIComponent кодирует / ? & # и подходит для значений запросов, сегментов пути и фрагментов; encodeURI сохраняет эти структурные символы и подходит для полных URL — использование неправильной функции является самой распространённой ошибкой URL-кодирования.
  • Наборы зарезервированных символов RFC 3986: общие разделители (: / ? # [ ] @) несут синтаксис URL; вспомогательные разделители (! $ & ' ( ) * + , ; =) могут быть разделителями или данными в зависимости от компонента URL — контекст определяет, будет ли зарезервированный символ процентно закодирован.
  • Кодирование пробелов: каноническая форма RFC 3986 — %20 (генерируется encodeURIComponent); application/x-www-form-urlencoded использует + (по умолчанию в HTML-формах) — семантически они несовместимы, и их смешение ломает серверные парсеры.
  • Многобайтовое кодирование UTF-8: «你» (U+4F60) → байты UTF-8 E4 BD A0 → %E4%BD%A0 (3 процентно-кодированных октета); тот же символ в GBK → %C4%E3 (2 октета) — согласование кодировки между клиентом и сервером обязательно для не-ASCII текста.
  • Обнаружение двойного кодирования: %2520 декодируется сначала в %20, затем в пробел — вывод режима декодирования выявляет этот паттерн; некорректные последовательности, такие как %ZZ или %2 (неполные), перехватываются и сообщаются как ошибки.
  • IRI (RFC 3987): интернационализированные идентификаторы ресурсов допускают символы Unicode непосредственно в URL; браузеры отображают декодированную форму в адресной строке, но передают процентно-закодированную форму UTF-8 по сети — режим кодирования инструмента показывает то, что фактически передаётся по HTTP.
  • Обработка ошибок decodeURIComponent: передача строки с неполной процентной последовательностью (% и менее 2 шестнадцатеричных цифр) вызывает URIError — инструмент оборачивает вызов в try/catch и выводит сообщение об ошибке, а не молча возвращает пустую строку.

Примеры

Кодирование китайских символов (UTF-8 percent-encoding)

Вход:  你好世界 (4 символа CJK, 12 байт UTF-8)
Выход: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C

Каждый байт UTF-8 (E4, BD, A0, ...) превращается в %XX
RFC: раздел 2.1 RFC 3986 определяет percent-encoding для URI
Применение: параметры запроса, сегменты пути, отправка форм

Кодирование разделителей query string

Вход:  name=张三&age=20
Выход: name%3D%E5%BC%A0%E4%B8%89%26age%3D20

%3D кодирует '=' (разделитель между ключом и значением)
%26 кодирует '&' (разделитель между параметрами)
RFC: раздел 3.4 RFC 3986 определяет зарезервированные символы компонента запроса

Кодирование полного URL (частичное кодирование)

Вход:  https://example.com/search?q=你好&type=web
Выход: https://example.com/search?q=%E4%BD%A0%E5%A5%BD&type=web

Примечание: схема, хост и существующие разделители НЕ кодируются
Кодируется только не-ASCII значение в query
RFC: раздел 3 RFC 3986 определяет иерархические компоненты URI

Кодирование пробелов (две конвенции)

Сегмент пути:  %20 (соответствует RFC 3986)
Query string:  + (историческая конвенция HTML-форм)

Пример: /search for me -> /search%20for%20me
Пример: q=hello world -> q=hello+world

Оба варианта декодируются в один и тот же результат; encodeURI использует %20, encodeURIComponent в некоторых реализациях использует %20 для пути и + для query

Часто задаваемые вопросы

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

Заменяет небезопасные символы в URL последовательностями с %: пробел → %20, & → %26, # → %23 и т. д. RFC 3986 перечисляет, какие символы безопасны (буквы и цифры плюс -, _, ., ~), а какие требуют кодирования. Браузеры, серверы и HTTP-библиотеки применяют или ожидают URL-кодирование на нужных границах.

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

encodeURI оставляет символы синтаксиса URL (: / ? # & =) нетронутыми — она ожидает целый URL. encodeURIComponent кодирует и их — она ожидает значение одного параметра. Страница даёт оба режима: для параметров запроса берите component-кодирование, для URL целиком — URI-кодирование.

Почему пробел иногда становится %20, а иногда +?

%20 — это стандарт URI. + — устаревшее соглашение для MIME-типа application/x-www-form-urlencoded, используемого при отправке HTML-форм. Большинству серверов они выглядят одинаково, но строго эквивалентными не являются — в современных URL используйте %20.

Нужно ли кодировать символы Unicode?

RFC 3986 разрешает только ASCII; не-ASCII должен быть закодирован в UTF-8 и затем процентно-экранирован (中 → %E4%B8%AD). Современные браузеры показывают Unicode в адресной строке, но передают по сети закодированный вид. Страница автоматически выполняет шаг UTF-8-кодирования.

Какие символы никогда не нужно кодировать?

Незарезервированные символы по RFC 3986: A–Z, a–z, 0–9, -, _, ., ~. Их кодирование технически разрешено, но даёт другую строку URL; серверы могут считать «a» и «%61» эквивалентными или разными — зависит от правил канонизации.

Почему в декодированном URL странные символы?

Скорее всего, он был закодирован дважды: %2520 декодируется в %20, потом в пробел — значит, кто-то закодировал URL дважды. В таком случае декодируйте дважды. Некоторые серверы автоматически удваивают кодирование; проверьте поведение клиента.

Кодирование выполняется локально?

Да. encodeURIComponent и decodeURIComponent работают в вашем браузере. URL никуда не отправляются.

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

Кодировщик/Декодировщик Base64

Онлайн-инструмент для кодирования и декодирования Base64 с поддержкой UTF-8 текста, кириллицы и изображений. Мгновенное кодирование без установки программ.

Кодировщик HTML-сущностей

Бесплатный онлайн-кодировщик HTML-сущностей: преобразует спецсимволы в сущности и обратно. Защищает от XSS-атак и обеспечивает безопасный вывод HTML.

Конвертер Unicode

Бесплатный онлайн-конвертер Unicode с поддержкой форматов \uXXXX, &#xXXXX; и других. Удобно работать с интернационализированным текстом и кодировками.

Инструмент экранирования JSON

Онлайн-инструмент для экранирования и разэкранирования JSON строк. Поддержка кавычек, переносов строк, табуляции и других специальных символов.

Генератор QR-кодов

Онлайн-инструмент для создания QR-кодов с поддержкой текста, URL, визитных карточек. Настраиваемый стиль, цвет и размер.

Инструмент поиска IP-адреса

Бесплатный онлайн-инструмент для определения вашего публичного IP-адреса и геолокации: страна, город и провайдер. Узнайте свой IP мгновенно в браузере.