URL кодирование/декодирование
Кодируйте специальные символы для URL или декодируйте процентно-кодированные строки URL. Необходимо для веб-разработки и работы с API.
Как использовать
- Введите или вставьте ваш текст или URL в поле ввода
- Нажмите «Кодировать» для процентного кодирования специальных символов или «Декодировать» для обратного преобразования
- Скопируйте результат для использования в вашем приложении
Часто задаваемые вопросы
-
Что такое 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¤cy=€")
// → "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 кодирование часто нужно выполнять вручную