URL-кодирование (percent-encoding): что это и как декодировать
- URL-кодирование (percent-encoding) заменяет «небезопасные» символы на комбинацию из знака % и двух шестнадцатеричных цифр, например пробел превращается в %20.
- Кодировать нужно пробелы, кириллицу, спецсимволы (?, &, #, =, /) и всё, что может нарушить структуру адреса.
- Кириллица кодируется по кодировке UTF-8: одна русская буква занимает 2 байта и превращается в 6 символов вида %D0%9F.
- Декодирование — обратный процесс: %20 снова становится пробелом, а %D0%9F — буквой «П».
Вы наверняка видели адреса, где вместо привычных букв мелькают загадочные «%D0%BF%D1%80%D0%B8» и знаки процента. Это не ошибка и не поломка — так работает URL-кодирование, механизм, который позволяет передавать в веб-адресах пробелы, русские буквы и специальные символы без риска «сломать» ссылку. В этой статье простыми словами разберём, что такое percent-encoding, зачем оно нужно, какие символы обязательно кодировать и как выполнить обратное преобразование — декодирование.
Кодируйте и декодируйте URL онлайн — бесплатно
Что такое URL-кодирование
URL-кодирование, оно же percent-encoding («процентное кодирование»), — это способ представить любой символ в адресе страницы с помощью безопасного набора знаков. Стандарт адресов (RFC 3986) разрешает использовать в URL только ограниченный алфавит: латинские буквы A–Z и a–z, цифры 0–9 и несколько знаков (- _ . ~). Всё остальное — пробелы, кириллица, кавычки, скобки — считается «небезопасным» и должно быть закодировано.
Работает это так: программа берёт байт символа, переводит его в шестнадцатеричное число и подставляет перед ним знак процента. Пробел имеет код 32, в шестнадцатеричной системе это 20, поэтому в адресе пробел выглядит как %20. Именно из-за знака процента метод и получил своё название.
Зачем кодировать URL
Главная причина — надёжность передачи данных. Адрес имеет строгую структуру, где определённые символы играют роль разделителей: вопросительный знак отделяет параметры, амперсанд разделяет пары «ключ=значение», решётка указывает на якорь. Если пользователь введёт в поисковую строку сайта слово с амперсандом или пробелом, а вы вставите его в ссылку «как есть», браузер или сервер поймут адрес неправильно.
Вот типичные ситуации, когда кодирование обязательно:
- Пробелы. В адресе их быть не должно — они превращаются в %20 (или, в параметрах формы, в знак +).
- Кириллица и другие национальные алфавиты. Русские буквы не входят в базовый набор ASCII, поэтому кодируются побайтно.
- Спецсимволы-разделители. Если ? & = # / являются частью самих данных, а не структуры адреса, их нужно закодировать, иначе смысл ссылки исказится.
- Знаки препинания и символы. Кавычки, скобки, проценты, плюсы — всё это тоже кодируется, чтобы адрес остался однозначным.
Какие символы кодируются
Проще запомнить наоборот: не кодируются только «безопасные» символы. Это латиница, цифры и знаки - _ . ~ (их называют unreserved). Всё остальное либо является служебным (reserved), либо небезопасным и подлежит кодированию, если используется как обычные данные. Ниже — таблица частых примеров.
| Символ | Код | Пояснение |
|---|---|---|
| пробел | %20 | в параметрах формы может быть + |
| ! | %21 | восклицательный знак |
| # | %23 | решётка (якорь) |
| % | %25 | сам знак процента |
| & | %26 | амперсанд (разделитель параметров) |
| + | %2B | плюс |
| / | %2F | слэш |
| = | %3D | равно |
| ? | %3F | вопросительный знак |
| П | %D0%9F | кириллица, 2 байта UTF-8 |
Как кодируется кириллица
С русскими буквами связана самая частая путаница. В отличие от латиницы, где одна буква — один байт, кириллица в кодировке UTF-8 занимает по два байта на символ. Поэтому одна буква превращается в шесть знаков: два байта, каждый в виде %XX. Например, слово «привет» кодируется как %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
Важно, чтобы и кодирование, и декодирование выполнялись в одной кодировке — сегодня это почти всегда UTF-8. Если сайт использует другую кодировку (например, устаревшую Windows-1251), те же буквы дадут совсем другие последовательности, и при неверном декодировании вместо текста вы увидите «кракозябры». Поэтому современный веб стандартизирован на UTF-8.
Как декодировать URL
Декодирование — это обратная операция. Алгоритм ищет в строке каждую конструкцию вида %XX, переводит шестнадцатеричное число обратно в байт и восстанавливает исходный символ. Так %20 снова становится пробелом, а пара %D0%9F собирается в букву «П». Делать это вручную по таблице долго, поэтому обычно используют готовые инструменты.
Способы декодировать (и закодировать) адрес:
- Онлайн-инструменты — вставляете строку, получаете результат в один клик, ничего устанавливать не нужно.
- JavaScript — функции encodeURIComponent() и decodeURIComponent() кодируют и раскодируют отдельные значения; encodeURI() и decodeURI() работают с адресом целиком.
- PHP — функции urlencode()/urldecode() для параметров форм и rawurlencode()/rawurldecode() для строгого percent-encoding.
- Python — модуль urllib.parse с методами quote() и unquote().
Практический совет: кодируйте только отдельные значения параметров, а не готовый адрес целиком. Иначе служебные разделители вроде ? и & тоже закодируются, и ссылка перестанет работать. Для отдельного значения в JavaScript подходит encodeURIComponent(), а для сборки всего адреса — encodeURI().
Частые вопросы
Что означает %20 в ссылке?
Это закодированный пробел. Код пробела — 32, в шестнадцатеричной системе это 20, поэтому в адресе он записывается как %20. В параметрах веб-форм пробел иногда заменяется знаком «плюс» (+).
Почему русские буквы в URL выглядят как %D0%BF?
Кириллица кодируется по стандарту UTF-8, где каждая буква занимает два байта. Каждый байт записывается как знак процента и две шестнадцатеричные цифры, поэтому одна русская буква превращается в шесть символов вида %D0%BF.
Нужно ли кодировать весь адрес или только его часть?
Кодируют только значения — например, текст поискового запроса или имя файла. Служебные символы, отделяющие части адреса (?, &, /, =), должны оставаться незакодированными, иначе браузер не поймёт структуру ссылки.
Чем отличается кодирование от декодирования?
Кодирование превращает обычные символы в безопасную запись вида %XX, а декодирование выполняет обратное преобразование — восстанавливает из %XX исходные пробелы, буквы и знаки. Это две стороны одного механизма percent-encoding.
Кодируйте и декодируйте URL онлайн — бесплатно
Обновлено: 9 июля 2026 г. Редакция MegaInet.art.