fixmint
RU

Процентное кодирование в URL: что на самом деле значат %20, + и %2F

Автор: · · обновлено 8 ноября 2026 г. · Чтение: 5 мин

Процентное кодирование записывает символ, который URL не может безопасно передать, как знак процента и следующее за ним значение байта в шестнадцатеричной системе. Пробел становится %20, амперсанд — %26, а косая черта — %2F. Кодирование защищает структуру ссылки, потому что такие символы, как & и =, разделяют части строки запроса.

Кодирование и декодирование URLВ ссылке полно кодов вида %20Сделать бесплатно

Какие символы можно оставить как есть

Стандарт URI (RFC 3986), на котором построены адреса, не требует кодировать латинские буквы от A до Z и от a до z, цифры и четыре знака: - _ . ~. Остальные символы в адресе выполняют свою функцию. Двоеточие отделяет схему от остальной части, косая черта разделяет части пути, знак вопроса начинает запрос, решётка начинает фрагмент, а & и = делят запрос на имена и значения. Символ, который выполняет функцию, нужно закодировать, если вы хотите передать его как данные, а не как часть структуры.

Поэтому один и тот же символ в одном месте кодируется, а в другом нет. В значении параметра запроса амперсанд должен быть %26, иначе ссылка разделится не в том месте. В пути ссылки он обычный символ.

Буквы, отличные от латиницы

Буквы вне базовой латиницы кодируются как байты UTF-8, и каждый байт записывается как процентный код. Буква é в слове café — это два байта C3 и A9, поэтому она становится %C3%A9, а всё слово — caf%C3%A9.

Простой пример помогает понять правила. Текст a b&c=d/é, закодированный как компонент, превращается в a%20b%26c%3Dd%2F%C3%A9. Кодируется каждый символ, который не является безопасной буквой, цифрой или знаком: пробел, амперсанд, знак равенства, косая черта и буква с диакритикой.

Компонент или весь URL

Существуют два вида кодирования, и у каждого есть своя задача. Кодирование компонента считает все зарезервированные символы данными. Используйте его для одного значения, например для поискового запроса или имени файла внутри ссылки. Если закодировать «rock & roll» как поисковый запрос, получится rock%20%26%20roll, и амперсанд останется внутри значения.

Кодирование всего URL сохраняет структуру. Если закодировать https://example.com/a b, получится https://example.com/a%20b: косые черты и двоеточие остаются на месте. Используйте этот вариант для полного адреса, который нужно привести к корректному виду, но не для значения, которое вставляется внутрь ссылки.

В инструменте для URL есть настройки «Компонент» и «Полный URL» именно по этой причине. Декодирование полного URL также сохраняет экранированные структурные символы, такие как %26 и %3D, поэтому ссылка продолжает работать после декодирования.

Плюсы и данные форм

Веб-формы используют другое соглашение. Когда форма отправляется как данные формы, пробел записывается как +, а не как %20. Сам знак плюс в этом случае записывается как %2B. Так фраза C++ tips в данных формы становится C%2B%2B+tips, а при обычном кодировании компонента — C%2B%2B%20tips.

С декодированием та же разница. В строке запроса + обычно означает пробел. В пути ссылки + — это знак плюс. Инструмент считает + пробелом только тогда, когда отмечена опция «Использовать + для пробелов (данные формы)», поэтому оставляйте её выключенной для путей и для значений, где плюс настоящий.

Как читать длинную строку запроса

Ссылка часто передаёт свои настройки после знака вопроса. Вот пример:

https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale

После декодирования видно, что поиск ведётся по запросу red shirt, размер — M, а тег — summer+sale. %2B остаётся знаком плюс, потому что был закодирован. Вставьте ссылку в инструмент для URL, и он выведет каждое имя и значение после декодирования, так что длинную ссылку легко прочитать. Если нужен только короткий адрес без служебных параметров отслеживания, сначала очистите ссылку.

Двойное кодирование

Самая частая ошибка — закодировать значение дважды. Повторное кодирование текста %20 даёт %2520, потому что сам знак процента кодируется как %25. Страница ищет в значении буквальную строку %20, и поиск или страница не совпадают. Декодируйте ссылку один раз, проверьте результат и кодируйте значение только тогда, когда это действительно нужно.

Повреждённые экранированные последовательности

За знаком процента должны следовать две шестнадцатеричные цифры, а для букв с диакритикой цифры должны образовывать корректную последовательность UTF-8. Ссылка, которую обрезали, или случайный знак процента в тексте могут оставить повреждённую последовательность, например %E0%A4%A. Инструмент декодирует то, что может, оставляет повреждённые байты в исходном виде и сообщает, сколько фрагментов не удалось декодировать. Он не останавливается на первой ошибке.

Особые случаи

  • Пробелы в ссылке, введённой вручную. Адресная строка браузера кодирует пробелы сама, но ссылка, скопированная в документ, может содержать обычные пробелы. Закодируйте их, прежде чем отправить ссылку дальше.
  • Доменные имена на других языках. Для них используется отдельная система — punycode, и кодирование пути или запроса не меняет имя хоста.
  • Половина эмодзи. При неудачном копировании может остаться одна половина суррогатной пары, которую нельзя закодировать. Инструмент заменяет её символом замены и сообщает об этом.
  • Base64 в ссылках. Значение Base64 в ссылке подчиняется своим правилам: вместо + и / используются - и _. См. Base64 простыми словами.

Как сделать это в fixmint

  1. Вставьте текст или ссылку в поле «Текст или URL».
  2. Выберите «Кодировать» или «Декодировать», затем «Компонент» для одного значения или «Полный URL» для всего адреса.
  3. Отметьте «Использовать + для пробелов (данные формы)» для ссылок, скопированных из веб-формы.
  4. Для ссылки смотрите раздел «Параметры запроса, декодированные», чтобы увидеть каждое имя и значение.
  5. Скопируйте результат.

Краткие ответы

Что означает %20?

Пробел. Его значение байта в шестнадцатеричной системе — 20.

Почему в ссылке стоит +, а не %20?

Скорее всего, ссылка пришла из формы, где + обозначает пробел. Опция «Использовать + для пробелов (данные формы)» декодирует его правильно.

Почему в ссылке я вижу %2520?

Значение закодировали дважды. Знак процента из %20 закодировали повторно как %25. Декодируйте один раз, чтобы получить %20, и ещё раз, чтобы получить пробел.

Переведено с помощью ИИ с Английский оригинал.

Комментарии

    Комментариев пока нет. Будьте первым.

    Ваша оценка (необязательно)

    Ваша почта никогда не показывается и не сохраняется.

    Обложка книги «How to Remain Valuable When Intelligence Becomes Cheap»How to Remain Valuable When Intelligence Becomes Cheap

    224 страницы о человеческих, экономических и стратегических преимуществах, которые сохраняют ценность, когда ИИ может выполнять большую часть когнитивной работы.

    $3.84Купить на GumroadНа английском