URL кодирование/декодирование

Кодируйте специальные символы для URL или декодируйте процентно-кодированные строки URL. Необходимо для веб-разработки и работы с API.

Как использовать

  1. Введите или вставьте ваш текст или URL в поле ввода
  2. Нажмите «Кодировать» для процентного кодирования специальных символов или «Декодировать» для обратного преобразования
  3. Скопируйте результат для использования в вашем приложении

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

  • Что такое URL-кодирование?

    URL-кодирование (также называемое процентным кодированием) заменяет специальные символы знаком процента и их шестнадцатеричным значением. Например, пробел становится %20.

  • Когда следует использовать URL-кодирование?

    Используйте URL-кодирование при включении специальных символов в параметры URL, строки запроса или данные формы, которые будут отправлены через HTTP.

  • В чём разница между encodeURI и encodeURIComponent?

    encodeURI кодирует полный URI, сохраняя такие символы, как :, / и ?. encodeURIComponent кодирует всё, кроме букв, цифр и нескольких специальных символов, что делает его подходящим для кодирования отдельных значений параметров.

  • Обрабатывает ли инструмент символы Unicode?

    Да, символы Unicode сначала кодируются в байты UTF-8, а затем каждый байт кодируется в процентном формате.

Что такое URL-кодирование и зачем оно нужно

URL-адрес может содержать только ограниченный набор символов, определённый стандартом RFC 3986. Пробелы, знаки вопроса, амперсанды, кириллица и многие другие символы имеют в URL специальное значение или вовсе недопустимы. Процентное кодирование (percent-encoding) — механизм замены таких символов их безопасным представлением.

Принцип прост: каждый символ представляется знаком % и двумя шестнадцатеричными цифрами, соответствующими его байтовому значению в UTF-8. Например:

  • Пробел → %20
  • Знак @%40
  • Буква я (кириллица) → %D1%8F

Зарезервированные и незарезервированные символы

Стандарт разделяет символы на три группы:

Незарезервированные — всегда безопасны в URL, не требуют кодирования: A–Z, a–z, 0–9, -, _, ., ~

Зарезервированные — имеют специальное синтаксическое значение в URL: :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =

Все остальные — должны быть закодированы.

Зарезервированные символы нужно кодировать только тогда, когда они используются как данные, а не как структурные разделители URL.

encodeURI против encodeURIComponent

Это различие критически важно для JavaScript-разработчиков:

encodeURI()

Предназначен для кодирования полного URL. Не кодирует зарезервированные символы (:, /, ?, &, #, = и другие), поскольку они являются структурными частями URL.

encodeURI("https://example.com/поиск?q=hello world")
// → "https://example.com/%D0%BF%D0%BE%D0%B8%D1%81%D0%BA?q=hello%20world"

encodeURIComponent()

Предназначен для кодирования отдельных компонентов — значений параметров запроса. Кодирует все символы, кроме незарезервированных, включая &, =, + и /.

encodeURIComponent("price=100&currency=€")
// → "price%3D100%26currency%3D%E2%82%AC"

Типичная ошибка: использование encodeURI для кодирования значений параметров. Если значение содержит & или =, URL будет неправильно разобран браузером.

URL-кодирование в разных контекстах

Строки запроса (Query strings)

Каждое значение параметра должно кодироваться через encodeURIComponent. Символ + в строках запроса традиционно используется как замена пробела (application/x-www-form-urlencoded), хотя стандартным является %20.

Пути URL (Path segments)

Пути URL обычно кодируются мягче — слеши / не кодируются, поскольку они разделяют сегменты. Русские буквы в путях сегодня поддерживаются большинством серверов (IDN / Punycode для доменов, percent-encoding для путей).

Хэши и якоря

Символ # начинает фрагмент и не кодируется в составе URL, но всё содержимое после него при необходимости кодируется.

Практические применения

  • Поисковые запросы с кириллицей: Google и Яндекс принимают и отображают кириллические запросы в URL, но внутри передают их в закодированном виде
  • OAuth и redirect_uri: URI перенаправления в параметрах OAuth должны быть закодированы через encodeURIComponent
  • Webhook-URL: при передаче URL в качестве значения параметра другого URL необходимо двойное кодирование
  • curl и Postman: при ручном тестировании API кодирование часто нужно выполнять вручную