Перейти к содержимому

URL-кодировщик: Экранирование специальных символов в URL-адресах онлайн бесплатно

Бесплатный инструмент для экранирования URL-строк, позволяющий мгновенно кодировать специальные символы. Преобразование пробелов, символов Юникода и других символов в процент-кодированный формат. Идеально подходит для API, веб-форм и международных URL-адресов. Попробуйте прямо сейчас!

Экранирование строк URL

Калькулятор загрузки...
📚

Документация

Кодирование URL: что это такое и как оно работает

Кодирование URL, также называемое процентным кодированием, — это способ представления символов в веб-адресе с использованием только небольшого набора безопасных символов ASCII. Оно заменяет небезопасный символ знаком %, за которым следуют две шестнадцатеричные цифры. Этот инструмент экранирования строк URL кодирует текст так же, как встроенная функция JavaScript encodeURIComponent.

Зачем URL нужно кодирование

URL может содержать только ограниченный набор символов: буквы, цифры и несколько знаков пунктуации. Пробелы, буквы с диакритическими знаками, символы нелатинских алфавитов и такие символы, как & или =, могут нарушить URL или изменить его смысл, если встречаются в нём без кодирования. Например, пробел внутри ссылки может привести к тому, что браузер или сервер воспримет URL как две отдельные части. Процентное кодирование заменяет эти символы кодом, который одинаково распознаётся всеми браузерами и серверами.

Символы, которые этот инструмент оставляет без изменений

Этот инструмент никогда не изменяет следующие символы. Они проходят без преобразований:

  • Прописные и строчные буквы: A–Z, a–z
  • Цифры: 0–9
  • Знаки пунктуации - . _ ~ ! * ' ( )

Все остальные символы кодируются в процентной форме, включая:

  • Пробел и такие знаки пунктуации, как : / ? # [ ] @ $ & + , ; =
  • Буквы с диакритическими знаками и любые другие символы, не относящиеся к ASCII или входящие в Unicode
  • Сам символ %, который всегда преобразуется в %25, даже если уже был частью последовательности процентного кодирования

В некоторых общих руководствах по синтаксису URL символы ! * ' ( и ) относят к знакам пунктуации, которые «могут требовать кодирования» в определённых контекстах. Этот конкретный инструмент их не кодирует, поскольку следует набору правил encodeURIComponent, согласно которому они считаются безопасными.

Как вычислить строку с процентным кодированием (формула)

Инструмент проверяет каждый символ входных данных по очереди и применяет следующее правило:

  1. Если символ входит в приведённый выше список неизменяемых символов, оставить его как есть.
  2. В противном случае преобразовать символ в последовательность байтов UTF-8. Буквы латиницы с диакритическими знаками, греческие, кириллические и арабские буквы используют два байта. Китайские, японские и корейские символы используют три байта. Эмодзи используют четыре байта.
  3. Записать каждый байт как двузначное шестнадцатеричное число.
  4. Поставить % перед каждой парой шестнадцатеричных цифр.
  5. Объединить результаты по порядку, чтобы получить закодированную строку.

Пример расчёта

Входные данные: Jürgen & Björk

Пошаговый разбор по символам:

СимволРезультат
JJ (без изменений)
ü%C3%BC (байты UTF-8 0xC3, 0xBC)
rgenrgen (без изменений)
(пробел)%20
&%26
(пробел)%20
BjBj (без изменений)
ö%C3%B6 (байты UTF-8 0xC3, 0xB6)
rkrk (без изменений)

Результат: J%C3%BCrgen%20%26%20Bj%C3%B6rk

Второй пример показывает, как работает набор неизменяемых символов. Кодирование строки -_.!~*'() даёт -_.!~*'() — в точности тот же текст, поскольку каждый её символ входит в набор незарезервированных символов. Кодирование строки 100% даёт 100%25, поскольку сам знак % не является безопасным символом.

Декодирование строки с процентным кодированием

Декодирование выполняет обратную операцию: каждая последовательность %XX считывается как шестнадцатеричный байт, байты снова объединяются в исходный символ UTF-8, и этот символ заменяет последовательность. Например, %C3%BC декодируется обратно в ü, а %20 — в пробел. Этот инструмент только кодирует; для обратного преобразования нужен отдельный декодер.

Распространённые применения

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

  • Поисковые поля, помещающие поисковый запрос в адресную строку, например ?q=shoes%20%26%20bags
  • Параметры запроса, содержащие имена, адреса и другие пользовательские данные
  • Ссылки на страницы с заголовками на языках, использующих буквы с диакритическими знаками или нелатинские письменности
  • Запросы к API, передающие токены или идентификаторы как часть URL

Примеры кода

1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
4

Функция quote в Python всегда оставляет без изменений буквы, цифры и символы - . _ ~. Пять дополнительных символов ! * ' ( ) нужно перечислить в параметре safe, чтобы получить поведение этого инструмента. Без них функция quote возвращает %21 %2A %27 %28 %29 вместо них.

История

Идея кодирования небезопасных символов в URL восходит к RFC 1738, принятому в (4 410 см) 1994 году; это был один из первых документов, определивших формат URL. RFC 3986, опубликованный в 2005 году, обновил правила и формально определил набор «незарезервированных» символов, которые никогда не требуют кодирования. encodeURIComponent — функция JavaScript, на которой основан этот инструмент, — следует несколько более широкому набору незарезервированных символов, чем RFC 3986: она также оставляет без кодирования ! * ' ( и ), как и более ранняя версия спецификации URI.

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

В чём разница между кодированием URL и экранированием URL? Это одно и то же. Оба термина обозначают процентное кодирование, при котором символ заменяется на % и две шестнадцатеричные цифры.

Почему !, *, ', ( и ) остаются без изменений в этом инструменте? Этот инструмент использует encodeURIComponent, которая считает эти пять символов безопасными и оставляет их в точности такими, как они были введены. Другие функции кодирования и некоторые серверы могут по-прежнему ожидать их кодирования, поэтому при возникновении проблемы следует проверить систему назначения.

В чём разница между %20 и + при обозначении пробела? Оба варианта обозначают пробел. %20 — это общее процентное кодирование пробела. Знак + используется только в данных формата application/x-www-form-urlencoded, применяемого при отправке HTML-форм, а не этим инструментом.

Декодирует ли этот инструмент уже закодированный текст? Нет. Он только кодирует. Если входные данные уже содержат знак %, этот % рассматривается как обычный символ и преобразуется в %25 в выходных данных, а не остаётся без изменений.

Как обрабатываются нелатинские символы, например китайский или арабский текст? Сначала каждый символ преобразуется в последовательность байтов UTF-8, затем каждый байт кодируется в процентной форме. Китайский символ занимает три байта, поэтому для него образуются три группы %XX. Арабская буква занимает два байта, поэтому для неё образуются две такие группы.

Когда инструмент отказывается кодировать текст? Только если текст содержит половину суррогатной пары. Суррогатная пара — это двухчастный код, используемый для хранения символа выше U+FFFF, например эмодзи. Отдельная половина не имеет корректного представления UTF-8, поэтому вместо результата инструмент показывает ошибку. При обычном вводе такое возникнуть не может; обычно это происходит из-за обрезанной копии или повреждённой ссылки.

Нужно ли кодировать весь URL или только его часть? Кодировать следует только части, содержащие пользовательские данные, например значения параметров запроса или сегменты пути, но не части, образующие структуру URL, такие как https:// и доменное имя. Кодирование полного URL с помощью кодировщика компонентов также преобразует его символы :, / и ? в процентные коды, нарушив адрес.

Источники

  1. RFC 3986 — унифицированный идентификатор ресурса (URI): общий синтаксис
  2. Процентное кодирование — Википедия
  3. MDN — encodeURIComponent()
  4. Стандарт URL — WHATWG