URL-инструменты
Кодирование URL и декодирование: в чем разница?
Двустороннее, ориентированное на компоненты руководство по кодированию и декодированию URL-адресов.
Автор Винешваран Виджаякумар, разработчик и издатель | | Рассмотрено под ClockTools редакционная политика
Оглавление
Кодирование URL-адреса преобразует небезопасные или значимые символы в компоненте URL-адреса в последовательности процентного кодирования; декодирование URL-адресов преобразует допустимые триплеты в читаемые символы. Кодируйте перед вставкой необработанных данных в компонент. Декодируйте, когда вам нужно проверить или использовать уже закодированное значение. ClockTools URL-кодер и URL-декодер позволяют тестировать оба направления без изменения исходного текста.
Выберите направление из ввода
Если входные данные представляют собой удобочитаемые данные, такие как summer shoes & bags, закодируйте их перед помещением в значение запроса. Если входные данные уже содержат такие последовательности, как %20, и вам нужны исходные символы, декодируйте их один раз. Стандарт URL-адреса WHATWG определяет наборы процентного кодирования для анализа и сериализации URL-адресов; RFC 3986 объясняет формат последовательностей процентного кодирования и зарезервированные символы.
| У вас есть | Вам нужно | Операция |
|---|---|---|
| Необработанное значение запроса | URL-безопасный компонент | Кодировать |
| Процентные тройки | Читаемое значение | Декодировать |
| Полный URL после разбора | Измененное поле | Измените этот компонент, затем сериализуйте |
Кодирование не является шифрованием. Оно делает синтаксис однозначным и не скрывает конфиденциальную информацию.
Следуйте одному обратимому примеру
Начните с summer shoes & bags. Кодировка компонента создает summer%20shoes%20%26%20bags. Пробелы становятся %20, а амперсанд становится %26, так что это данные, а не разделитель. Однократное декодирование этого результата восстанавливает исходную фразу.
При проверке 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.

