Что такое Кодировщик/Декодировщик URL?

Кодировщик/декодировщик URL преобразует специальные символы в URL в процентно-кодированный вид и обратно. Пригодится при работе со строками запросов, параметрами API или URL, содержащими пробелы и спецсимволы.

Доступны четыре режима кодирования. Component (encodeURIComponent) экранирует все зарезервированные символы, включая / и &, что и нужно внутри значения параметра. Full URL (encodeURI) оставляет структурные символы нетронутыми, чтобы адрес целиком оставался разбираемым. Режим данных формы кодирует пробелы как + для отправок application/x-www-form-urlencoded. Строгий режим RFC 3986 идёт дальше и экранирует ещё и !'()* — субразделители, которые encodeURIComponent пропускает, поэтому результат подходит для любого URL по стандарту. Auto-detect ищет последовательности %XX и сам выбирает направление, переключатель «Вживую» пересчитывает результат по мере ввода, опция «Рекурсивное декодирование» снимает двойное и тройное кодирование до конца, а панель сравнения показывает один и тот же ввод, закодированный сразу всеми четырьмя режимами.

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

  1. Вставьте URL или текстовую строку в поле ввода.
  2. Нажмите «Кодировать», чтобы преобразовать спецсимволы в процентно-кодированный вид, или «Декодировать» — чтобы вернуть исходный вид.
  3. Скопируйте результат в буфер обмена или используйте кнопку замены для переключения ввода и вывода.

Когда использовать

  • Собирать query string вручную, экранируя пробелы, & и знаки равенства.
  • Расшифровать строку серверного лога с percent-encoding в читаемый текст.
  • Вставить URL с не-ASCII символами в простое текстовое письмо так, чтобы он не сломался.

Результат

Разработчик кодирует «hello world&foo=bar» в «hello%20world%26foo%3Dbar» для использования в параметре строки запроса.

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

Чем отличаются encodeURI и encodeURIComponent?
encodeURI не трогает структурные знаки /, ?, & и =, чтобы URL целиком работал. encodeURIComponent экранирует их все — это правильно, когда текст идёт как одно значение параметра после ? в query string.
Почему в декодированной строке остаются %20?
Либо исходник был закодирован дважды (один проход возвращает всё ещё закодированную строку, нужен второй), либо это form-encoded данные, где пробел кодируется плюсом. Декодируйте дважды или замените + на пробел перед декодированием.
Какие символы можно класть в URL без кодирования?
Незарезервированные символы: A–Z, a–z, 0–9 и четыре знака — дефис, подчёркивание, точка и тильда. Всё прочее, включая пробелы, не-ASCII буквы и зарезервированные знаки без синтаксической роли в данном месте, должно быть percent-encoded.
Сломает ли строку повторное кодирование?
Да. Двойное кодирование превращает каждый % в %25, и для возврата к оригиналу понадобится декодировать два раза. Если вы добавляете значение из другой системы, которое уже могло быть закодировано, сначала декодируйте его или ведите флаг состояния.
Поддерживает ли инструмент юникод, например русский или китайский?
Поддерживает. Встроенный encodeURIComponent в браузере преобразует любой символ в последовательность байт UTF-8 и затем кодирует каждый байт процентом. Декодирование возвращает обратно: «кофе» прекрасно проходит туда-обратно через свою percent-форму.

Похожие инструменты