Кодирование
URL Encode/Decode
Кодирование и декодирование URL — символы, которые нужно экранировать в ссылках и параметрах запроса.
URL-кодирование (percent-encoding) заменяет символы, недопустимые в URL — пробелы, кириллицу, спецсимволы — на последовательности вида %XX, где XX — шестнадцатеричный код байта. Это нужно, чтобы ссылки и параметры запроса передавались без искажений.
Как пользоваться
- Кодирование: вставьте текст или URL — символы вне допустимого набора ASCII будут заменены на %XX-последовательности.
- Декодирование: вставьте закодированную строку, чтобы увидеть исходный текст.
- Для кодирования всего URL и для кодирования отдельного параметра запроса используются немного разные наборы символов — инструмент позволяет выбрать нужный режим.
Типичные сценарии
- Формирование query-параметров с текстом, содержащим пробелы, амперсанды или кириллицу.
- Диагностика, почему ссылка с параметром ломается — часто причина именно в незакодированных спецсимволах.
- Декодирование URL из сторонних систем для чтения их в исходном виде.
Что стоит помнить
Кодировать нужно значения параметров, а не весь URL целиком — иначе будут закодированы и нужные разделители (:, /, ?, &).
JavaScript-функции encodeURIComponent и encodeURI кодируют разные наборы символов — первая предназначена именно для значений параметров.
Статья об этом инструменте: URL Encode/Decode: percent-encoding в ссылках
Часто задаваемые вопросы
В чём разница между Component и URI при кодировании?
Component (encodeURIComponent) экранирует почти все спецсимволы, включая &, = и ?, поэтому подходит для значений параметров запроса. URI (encodeURI) не трогает символы, которые нужны для структуры самого адреса, такие как /, ? и &, и применяется для кодирования целой ссылки.
Чем URL-кодирование отличается от Base64?
Это разные вещи: URL-кодирование (percent-encoding) заменяет отдельные небезопасные символы на вид %XX, сохраняя остальной текст читаемым, а Base64 полностью перекодирует данные в новый алфавит. Иногда встречается «URL-safe Base64» — это Base64 с заменой символов +/ на -_, а не URL-кодирование.
Текст куда-то передаётся при кодировании или декодировании?
Нет, всё происходит локально в браузере — введённые данные никуда не отправляются.
Что такое двойное кодирование и как его распознать?
Это ошибка, когда уже закодированную строку кодируют ещё раз — символ % сам превращается в %25, и %20 становится %2520. Признак проблемы — последовательности вида %25XX в декодированном результате.
Почему пробел иногда кодируется как +, а иногда как %20?
+ для пробела — это формат application/x-www-form-urlencoded, который используют формы и query-строки. %20 — стандартный percent-encoding из RFC 3986, корректный в любой части URL.