ClockTools Блог

URL-инструменты

Кодирование URL и декодирование: в чем разница?

Двустороннее, ориентированное на компоненты руководство по кодированию и декодированию URL-адресов.

Автор , разработчик и издатель | | Рассмотрено под ClockTools редакционная политика

Редакционная иллюстрация для URL-кодирования и декодирования: в чем разница?
Оглавление

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

ClockTools URL-кодер с запросом, содержащим пробелы и амперсанд
ClockTools URL-кодер с запросом, содержащим пробелы и амперсанд

Выберите направление из ввода

Если входные данные представляют собой удобочитаемые данные, такие как summer shoes & bags, закодируйте их перед помещением в значение запроса. Если входные данные уже содержат такие последовательности, как %20, и вам нужны исходные символы, декодируйте их один раз. Стандарт URL-адреса WHATWG определяет наборы процентного кодирования для анализа и сериализации URL-адресов; RFC 3986 объясняет формат последовательностей процентного кодирования и зарезервированные символы.

У вас естьВам нужноОперация
Необработанное значение запросаURL-безопасный компонентКодировать
Процентные тройкиЧитаемое значениеДекодировать
Полный URL после разбораИзмененное полеИзмените этот компонент, затем сериализуйте

Кодирование не является шифрованием. Оно делает синтаксис однозначным и не скрывает конфиденциальную информацию.

Следуйте одному обратимому примеру

Начните с summer shoes & bags. Кодировка компонента создает summer%20shoes%20%26%20bags. Пробелы становятся %20, а амперсанд становится %26, так что это данные, а не разделитель. Однократное декодирование этого результата восстанавливает исходную фразу.

Диаграмма преобразования обратимого кодирования и декодирования URL-адресов
Диаграмма преобразования обратимого кодирования и декодирования URL-адресов

При проверке ClockTools в режиме компонента URI пример длиной 74 символа преобразовался в строку длиной 102 символа с 14 escape-последовательностями. Эти числа относятся только к этому примеру; для других входных данных результаты будут другими.

Соблюдайте границы компонентов URL

URL-адрес содержит фрагменты с разным синтаксисом: схему, хост, путь, запрос и фрагмент. Самый безопасный рабочий процесс — проанализировать URL-адрес, изменить предполагаемое значение, а затем сериализовать его с помощью API для вашей среды. Кодирование всего собранного URL-адреса может преобразовать в escape-последовательности такие разделители, как :, /, ? и &, которые должны сохранять свое структурное значение.

Случай с символом пробела заслуживает особого внимания. При обычном процентном кодировании пробел представляется как %20. Вместо этого для сериализации запросов в стиле HTML-формы может использоваться +. Прочтите Кодирование пробела в URL, чтобы узнать об этой узкой проблеме совместимости; в этой статье рассматриваются направление работы, выбор компонентов и реверс.

Предотвратить двойное кодирование

Двойное кодирование происходит, когда закодированный текст снова проходит через кодировщик. Например, %20 может стать %2520, поскольку % закодирован как %25. Отслеживайте, является ли каждое значение необработанным или закодированным, кодируйте на одной границе и декодируйте только столько раз, сколько требует контракт данных. RFC 3986 предупреждает, что строки с процентным кодированием нельзя кодировать или декодировать более одного раза без явной причины.

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

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

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

Кодирование преобразует символы в представление, пригодное для передачи; декодирование преобразует допустимые последовательности процентного кодирования в читаемые символы.

Должен ли я кодировать полный URL-адрес или только компонент?

Обычно кодируйте вставляемое значение или компонент, а не уже собранный URL-адрес со значимыми разделителями.

Почему URL-адрес иногда содержит %2520?

Обычно это означает, что %20 было закодировано повторно: знак процента превратился в %25, в результате чего значение оказалось закодировано дважды.

Всегда ли знак плюса совпадает с пробелом?

Нет. Некоторые анализаторы запросов с кодировкой формы рассматривают + как пробел, тогда как для общего процентного кодирования URL-адресов используется %20.

Об авторе

Винешваран Виджаякумар

Основатель, разработчик и издатель ClockTools | Менеджер по цифровому маркетингу | Индия

Винешваран — инженер с многолетним техническим опытом, в том числе профессиональной работой менеджером по цифровому маркетингу в Дубае. Его работа объединяет анализ данных, поисковую оптимизацию, оптимизацию коэффициента конверсии, контент-системы, визуальное производство, а также прикладной искусственный интеллект и машинное обучение. В ClockTools он превращает этот междисциплинарный опыт в специализированные утилиты для браузера и практические руководства с учетом исходных кодов.

Профиль в LinkedIn