Как пользоваться: Кодирование и декодирование URL
- Выберите режим: Кодировать компонент для одного значения параметра или сегмента пути, Кодировать весь URL для полного адреса или Декодировать.
- Введите или вставьте текст в левое поле; результат обновляется по мере ввода.
- Включите Пробелы как + для кодирования в стиле HTML-форм или Каждая строка отдельно, чтобы обработать список.
- Вставьте любой URL в парсер URL, чтобы увидеть хост, путь и таблицу декодированных параметров запроса.
Что такое кодирование URL?
Кодирование URL, или процентное кодирование (RFC 3986), заменяет символы, которые не допускаются в адресе или имеют в нём специальное значение, на % и две шестнадцатеричные цифры. Пробел превращается в %20, & — в %26, а не-ASCII символы сначала переводятся в байты UTF-8, а затем кодируются байт за байтом: é → %C3%A9, € → %E2%82%AC. Без кодирования значение вроде Tom & Jerry в строке запроса разбилось бы на два параметра.
encodeURIComponent и encodeURI
В JavaScript есть две функции, и выбор не той — классическая ошибка:
| Символ | encodeURIComponent | encodeURI |
|---|---|---|
| Пробел | %20 | %20 |
/ ? # & = : @ + , ; $ | Кодируется | Остаётся как есть |
A–Z a–z 0–9 - _ . ! ~ * ' ( ) | Остаётся | Остаётся |
é, эмодзи, другие не-ASCII символы | Процентное кодирование UTF-8 | Процентное кодирование UTF-8 |
Используйте encodeURIComponent («Кодировать компонент») для всего, что вы вставляете внутрь URL: значение параметра запроса, сегмент пути, адрес перенаправления, передаваемый как параметр. encodeURI («Кодировать весь URL») применяйте только к полному URL, который содержит пробелы или не-ASCII символы, потому что она оставляет служебные символы : / ? # & без изменений.
%20 или +?
В пути URL пробел должен быть записан как %20. В строках запроса, которые отправляют HTML-формы (application/x-www-form-urlencoded), пробелы записываются как +. Большинство серверов принимают оба варианта в строке запроса, но знак плюс, переданный буквально, нужно отправлять как %2B. Декодер по умолчанию считает + пробелом; снимите галочку, если ваши данные содержат настоящие знаки плюс.
Ошибки декодирования
После % должны идти ровно две шестнадцатеричные цифры, а многобайтовые символы UTF-8 требуют всех своих байтов. Обычная функция decodeURIComponent() выдаёт URIError: malformed URI sequence на первой некорректной последовательности; этот инструмент декодирует всё корректное, оставляет неверные части без изменений и показывает, какие именно это части. Строки с двойным кодированием (%2520) после одного прохода превращаются в %20, поэтому декодируйте повторно, чтобы получить пробел.
Устройство URL
https://user@shop.example.com:8443/search?q=shoes#results состоит из схемы (https:), необязательных учётных данных, хоста, порта, пути, строки запроса и фрагмента. Парсер выше использует стандартный API URL браузера (WHATWG URL Standard), тот же, что применяет fetch(). Создаёте ссылки для рекламных кампаний? Попробуйте UTM-конструктор. Нужно закодировать бинарные данные? Используйте Base64.
Также ищут как: percent encoding, urlencode, urldecode, encodeuricomponent.
Инструменты, которые хорошо сочетаются с Кодирование и декодирование URL
- HTML-сущности — Экранируйте < > & ", чтобы текст безопасно отображался в HTML, преобразуйте акценты и символы в именованные или числовые сущности либо декодируйте HTML с сущностями обратно в обычный текст.
- Генератор slug — Превратите любой заголовок в чистый URL-slug в нижнем регистре.
- JWT декодер — Вставьте JSON Web Token, чтобы просмотреть его заголовок и payload, узнать, когда истекает срок действия, и проверить подпись.
- Переводчик азбуки Морзе — Введите текст, чтобы получить код Морзе, или вставьте точки и тире, чтобы расшифровать их.
Часто задаваемые вопросы
Когда использовать encodeURIComponent вместо encodeURI?
/ ? & # =.Почему пробел иногда выглядит как %20, а иногда как +?
%20 — кодирование по RFC 3986, допустимое в любом месте URL. + означает пробел только в строках запроса в формате form-urlencoded (application/x-www-form-urlencoded), которые отправляют HTML-формы.Что означает «URIError: malformed URI sequence»?
%, за которым не следуют две шестнадцатеричные цифры, или неполную последовательность байтов UTF-8. Этот декодер оставляет такие части без изменений и перечисляет их, вместо того чтобы завершиться с ошибкой.Какие символы никогда не нужно кодировать?
A–Z a–z, цифры 0–9 и - _ . ~. Всё остальное либо зарезервировано для синтаксиса URL, либо должно кодироваться процентно.