Кодирование

URL Encode/Decode

Кодирование и декодирование URL — символы, которые нужно экранировать в ссылках и параметрах запроса.

URL-кодирование (percent-encoding) заменяет символы, недопустимые в URL — пробелы, кириллицу, спецсимволы — на последовательности вида %XX, где XX — шестнадцатеричный код байта. Это нужно, чтобы ссылки и параметры запроса передавались без искажений.

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

Типичные сценарии

Что стоит помнить

Кодировать нужно значения параметров, а не весь 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.

Статьи: Кодирование

Base64: зачем нужно кодирование и как оно работает

Как Base64 превращает бинарные данные в текст ASCII и где это реально нужно.

Base32: чем отличается от Base64 и когда удобнее

Регистронезависимый алфавит Base32 и сценарии, где он удобнее Base64.

HTML Entities: как безопасно выводить спецсимволы на странице

Почему символы < > & нужно экранировать и как это предотвращает поломку разметки.

JWT: структура токена и что значит «декодировать» JWT

Header, payload и signature JWT-токена и почему декодирование — не то же самое, что проверка подписи.

Unicode Escape: что означают последовательности \uXXXX

Откуда в JSON и JS-строках берутся последовательности вида \u0041 и что они означают.

ROT13 и шифр Цезаря: простая замена символов

Почему сдвиг на 13 букв делает ROT13 симметричным и зачем его вообще используют сегодня.

Punycode: как домены с кириллицей работают в DNS

Как домен вроде «пример.рф» превращается в ASCII-запись с префиксом xn--.

Азбука Морзе: как текст превращается в точки и тире

Принцип кодирования букв точками и тире и где азбука Морзе применяется сейчас.

Data URI: когда встраивать изображения прямо в код

Как data:-URI встраивает содержимое файла прямо в HTML или CSS и когда это оправдано.

Gzip + Base64: сжатие данных для передачи текстом

Зачем сжатые бинарные данные ещё и кодируют в Base64 перед тем, как поместить в текстовое поле.

XML Entities: экранирование символов в XML-документах

Пять обязательных XML-entity, без которых документ ломается при парсинге.