Кодировщик URL
Процентное кодирование специальных символов в URL или отдельных компонентах URI, чтобы они были безопасны для передачи в HTTP запросах, строках запроса и данных форм. Соответствует RFC 3986.
Пробел в строке запроса URL тихо нарушает запрос. RFC 3986 (Унифицированный Идентификатор Ресурса: Общий Синтаксис) определяет, какие символы безопасны в URL и какие должны быть процентно закодированы. Процентное кодирование заменяет каждый небезопасный байт на %, за которым следуют две заглавные шестнадцатеричные цифры. Этот браузерный кодировщик мгновенно применяет RFC 3986, не передавая ваши данные никуда. Используйте его для кодирования полных URL или отдельных значений параметров запроса и получайте соответствующий стандартам вывод каждый раз.
Как закодировать URL
- Вставьте URL или текст в поле ввода.
- Выберите режим Полный URL, чтобы закодировать только небезопасные символы, или режим Компонент, чтобы закодировать все специальные символы, включая
&и=. - Процентно закодированный вывод появится в панели результатов.
- Скопируйте закодированную строку для использования в вашем запросе, коде или документации.
Понимание процентного кодирования
Стандарт 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, параметры запроса, токены аутентификации и любые другие данные, которые вы вставляете, никогда не передаются на наши серверы.