ByteCompress

Кодировщик URL

Процентное кодирование специальных символов в URL или отдельных компонентах URI, чтобы они были безопасны для передачи в HTTP запросах, строках запроса и данных форм. Соответствует RFC 3986.

0 chars
FreeClient-sideNo signup

Пробел в строке запроса URL тихо нарушает запрос. RFC 3986 (Унифицированный Идентификатор Ресурса: Общий Синтаксис) определяет, какие символы безопасны в URL и какие должны быть процентно закодированы. Процентное кодирование заменяет каждый небезопасный байт на %, за которым следуют две заглавные шестнадцатеричные цифры. Этот браузерный кодировщик мгновенно применяет RFC 3986, не передавая ваши данные никуда. Используйте его для кодирования полных URL или отдельных значений параметров запроса и получайте соответствующий стандартам вывод каждый раз.

Как закодировать URL

  1. Вставьте URL или текст в поле ввода.
  2. Выберите режим Полный URL, чтобы закодировать только небезопасные символы, или режим Компонент, чтобы закодировать все специальные символы, включая & и =.
  3. Процентно закодированный вывод появится в панели результатов.
  4. Скопируйте закодированную строку для использования в вашем запросе, коде или документации.

Понимание процентного кодирования

Стандарт RFC 3986

RFC 3986 (IETF, 2005) определяет две категории символов в URI. Неограниченные символы (A-Z a-z 0-9 - _ . ~) могут появляться без кодирования. Зарезервированные символы (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) имеют специальное структурное значение и могут или не могут нуждаться в кодировании в зависимости от контекста. Каждый другой символ - включая пробелы, не-ASCII Unicode и символы вне этих наборов - должен быть процентно закодирован.

encodeURI против encodeURIComponent

JavaScript предоставляет две функции кодирования. encodeURI() кодирует полный URL и оставляет зарезервированные символы нетронутыми, поскольку они выполняют структурные роли. encodeURIComponent() также кодирует структурные символы, рассматривая их как буквальные данные - она предназначена для имен и значений отдельных параметров запроса, где & и = нарушили бы синтаксис URL. Полный URL режим этого инструмента соответствует encodeURI; Режим Компонент соответствует encodeURIComponent.

Пример

Ввод

Hello World! @2024

Вывод (Режим Компонент)

Hello%20World!%20%402024

Пробел кодируется как %20 (стандарт RFC 3986); @ становится %40. Восклицательный знак является неограниченным символом в некоторых контекстах и может или не может быть закодирован в зависимости от режима.

Распространенные случаи использования

  • Значения параметров запроса - Кодируйте значения, содержащие &, = или + перед добавлением к URL
  • Запросы поисковых систем - Кодируйте ввод пользователя перед созданием URL перенаправления
  • Создание запросов API - Кодируйте сегменты пути, содержащие слэши, пробелы или специальные символы
  • Параметры OAuth - Базовые строки подписи OAuth 1.0 требуют процентного кодирования в соответствии с RFC 5849

Распространенные ошибки

  • Двойное кодирование - Если значение уже процентно закодировано, повторное кодирование закодирует сам %, производя %2520 вместо %20
  • Использование режима Полный URL для значений параметров - Режим Полный URL оставляет & и = некодированными, нарушая синтаксис строки запроса; используйте режим Компонент для значений параметров
  • Забывание о не-ASCII символах - Текст, не входящий в ASCII, должен быть сначала преобразован в байты UTF-8, затем каждый байт процентно закодирован отдельно

Чтобы обратить процесс, используйте Декодер URL. Для двоичных данных, передаваемых в параметрах запроса URL, сначала закодируйте с помощью Кодировщика Base64 в безопасном для URL режиме, затем вывод уже безопасен для URL без дополнительного процентного кодирования.

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

В чем разница между кодированием URL и кодированием Base64?

Процентное кодирование заменяет небезопасные символы на %XX шестнадцатеричные последовательности, сохраняя безопасные символы без изменений, поэтому длина вывода схожа с длиной ввода. Base64 преобразует все данные в алфавит из 64 символов, увеличивая размер на 33%, но гарантируя, что результат содержит только безопасные ASCII символы. Процентное кодирование делает определенные символы безопасными для URL; Base64 кодирует произвольные двоичные данные как текст.

Когда мне использовать encodeURI и encodeURIComponent в JavaScript?
encodeURI() предназначен для кодирования полного URL - он сохраняет структурные символы, такие как : / ? # & =. encodeURIComponent() предназначен для кодирования отдельных значений внутри URL - он кодирует структурные символы, чтобы они рассматривались как буквальные данные, а не как синтаксис URL. Если сомневаетесь, используйте encodeURIComponent() для любых вводимых пользователем данных.
Почему пробел становится %20 в некоторых кодировщиках, а в других - +?
%20 - это процентное кодирование RFC 3986 для пробела и корректно для сегментов пути URI и значений запроса. Знак +, представляющий пробел, специфичен для application/x-www-form-urlencoded (отправка HTML форм), что предшествует RFC 3986. Оба варианта допустимы в своих контекстах, но %20 является универсальным стандартом вне HTML форм.
Работает ли кодирование URL для не-ASCII символов?

Да. Символы, не входящие в ASCII, сначала преобразуются в байты UTF-8, затем каждый байт кодируется отдельно. Символ ş (U+015F) становится %C5%9F. Китайский символ 中 (U+4E2D) становится %E4%B8%AD. Современные браузеры и серверы ожидают кодирования UTF-8 для не-ASCII символов в URL.

Отправляются ли мои данные URL на ваши серверы, когда я использую этот инструмент?

Нет. Все кодирование использует encodeURI() или encodeURIComponent(), выполняемое локально в вашем браузере. URL, параметры запроса, токены аутентификации и любые другие данные, которые вы вставляете, никогда не передаются на наши серверы.