Инструменты
Руководства

Кодирование / декодирование URL

Кодирование

Процентное кодирование компонентов URL и полных URL (RFC 3986).

100 % на клиенте Без бэкенда
Ввод
Вывод
На этой странице

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

URL может содержать лишь небольшой набор неэкранированных символов — ASCII-буквы, цифры и горстку знаков, таких как -, _, ., ~. Всё остальное (пробел, &, китайский иероглиф, эмодзи, даже /, когда он означает данные, а не разделитель пути) обязано быть записано как процентно-кодированная escape-последовательность: % с двумя шестнадцатеричными цифрами, например %20 для пробела или %E4%B8%AD для UTF-8-байтов символа . URL-кодирование — механический перевод, делающий произвольный текст безопасным для передачи внутри URL.

Есть две разные задачи, которые постоянно путают, и этот инструмент открывает обе через селектор Параметры:

  • Режим «Компонент» (путь JavaScript encodeURIComponent) экранирует всё, что не является буквой, цифрой или одним из - _ . ! ~ * ' (. Используйте его, когда текст — отдельный кусок данных, который вы собираетесь поместить в параметр запроса, сегмент пути или фрагмент, чтобы символы со структурным значением (/ ? & = #) превратились в безобидный литеральный текст.
  • Режим «Полный» (путь encodeURI) экранирует те же небезопасные байты, но намеренно оставляет в покое собственные структурные символы URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =). Используйте его, когда у вас уже есть целый URL правильной формы и нужно лишь почистить литеральные символы внутри него.

Декодирование обращает любую из форм. Когда ввод содержит malformed-последовательность вроде %GG (некорректный hex) или одиночный %, инструмент сообщает об ошибке и указывает на проблемную позицию, а не угадывает.

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

  1. Выберите Кодировать или Декодировать переключателем в левом верхнем углу.
  2. В Параметры выберите Компонент для отдельного значения, помещаемого в URL, или Полный для целого URL, который должен сохранить свою структуру.
  3. Вставьте текст в панель Ввод слева.
  4. Прочитайте результат в панели Вывод справа и нажмите Копировать.
  5. Пример загружает демонстрационную строку; Очистить сбрасывает панели.

Ключевые возможности#

  • Две реальные области действия, а не одна. «Компонент» против «Полный» в точности повторяет различие encodeURIComponent / encodeURI, поэтому экранировать отдельное значение или причесать весь URL можно без смены инструмента.
  • UTF-8 по умолчанию. Не-ASCII символы кодируются как их UTF-8-байтовая последовательность (стандарт со времён RFC 3986), поэтому 中文 становится %E4%B8%AD%E6%96%87, а не одно-escape’ным Latin-1-блоком.
  • Ошибки указывают позицию. Когда декодирование натыкается на некорректную %-escape, строка состояния сообщает, где она, вместо того чтобы выбрасывать весь ввод.
  • Работает локально. Всё происходит в вашем браузере; ничто из введённого не загружается.

Разбор примера#

Кодирование фрагмента a/b?c=d & e в режиме Компонент даёт:

a%2Fb%3Fc%3Dd%20%26%20e

Заметьте, что / становится %2F, ? становится %3F, = становится %3D, пробел становится %20, а & становится %26 — каждый символ, который иначе мог бы быть прочитан как структура URL, нейтрализован. Это правильная форма для упаковки всей строки в одно значение запроса.

Теперь переключитесь в режим Полный и закодируйте целый URL:

https://example.com/path?q=hello world&lang=zh CN

Результат сохраняет протокол, косые черты, ? и & нетронутыми и экранирует лишь литеральные пробелы:

https://example.com/path?q=hello%20world&lang=zh%20CN

В этом разница между двумя режимами одним взглядом: «Компонент» сплющивает всё до данных, «Полный» сохраняет скелет URL и чистит лишь те байты, что нуждались в чистке.

FAQ#

Компонент или Полный — как решить?#

Если вы собираете строку запроса и одно из значений пришло от пользователя, кодируйте это значение режимом Компонент. Если у вас уже полностью готовый URL, просто содержащий несколько случайных символов (пробелы, акценты), пропустите его целиком через Полный. Полезная проверка: нужно ли, чтобы вывод по-прежнему работал как ссылка благодаря своим ?, & и /? Тогда используйте «Полный». Эти символы на самом деле часть данных? Тогда «Компонент».

В декодированной строке есть %GG, и инструмент выдаёт ошибку. Почему?#

За % всегда должны следовать две шестнадцатеричные цифры. %GG — некорректный hex, поэтому декодер его отвергает и сообщает позицию — то же, что выбросило бы URIError в коде. Либо поправьте источник, чтобы он посылал %25 (кодированная форма литерального %), либо исправьте malformed-escape.

Кодировать до или после сборки строки запроса?#

Кодируйте каждое значение до того, как соединять его через = и &. Если сначала собрать ?q=a & b, а затем закодировать всё целиком режимом «Компонент», = и & тоже экранируются и сервер перестанет видеть их как разделители. Кодируйте куски, затем собирайте.

Обрабатывает ли инструмент Unicode так же, как браузеры?#

Да. Современные браузеры и серверы ожидают, что процентные escape-последовательности несут UTF-8-байты, и именно это выдаёт инструмент — становится %E4%B8%AD. Если вы отлаживаете старую систему, ждущую унаследованную однобайтовую кодировку (Latin-1, GBK и т. п.), байты будут отличаться, и понадобится инструмент под конкретную кодировку.