URL Кодирование и Декодирование

Преобразование URL-адресов в формат, безопасный для передачи через Интернет (Percent-encoding). Заменяет небезопасные символы (пробелы, кавычки, кириллицу) на код со знаком %.

Полное руководство по URL кодированию (Percent-Encoding)

URL-кодирование (или процентное кодирование) — это фундаментальный механизм Интернета, который позволяет безопасно передавать информацию через URL-адреса. В отличие от простого текста, URL-адреса имеют строгие ограничения: они могут содержать только ограниченный набор символов US-ASCII (латинские буквы, цифры и несколько знаков препинания).

Любой символ за пределами этого набора — например, пробел, кириллица ("Привет"), эмодзи или специальные символы (&, =) — должен быть преобразован в безопасный формат, понятный любому веб-серверу в мире.

Как пользоваться инструментом

  1. Кодирование: Введите обычный текст (например, поисковый запрос или ссылку с русскими буквами) и нажмите "Кодировать". Инструмент заменит все опасные символы на %XX.
  2. Декодирование: Вставьте ссылку, полную непонятных знаков вроде %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82, и нажмите "Декодировать", чтобы увидеть исходный текст.

Технические детали: Как это работает?

Стандарт RFC 3986 определяет, как именно должно происходить кодирование. Процесс состоит из двух шагов:

  1. Конвертация в байты: Сначала символ преобразуется в последовательность байтов согласно кодировке UTF-8. Например, русская буква «А» в UTF-8 занимает 2 байта: D0 и 90.
  2. Процентная запись: Каждому байту приписывается знак процента %. В итоге «А» превращается в %D0%90.

Категории символов в URL

Тип символов Примеры Нужно ли кодировать?
Unreserved (Безопасные) A-Z, a-z, 0-9, -, _, ., ~ Нет
Reserved (Служебные) :, /, ?, #, [, ], @ Да, если они не используются по прямому назначению (как разделители)
Other (Опасные) Пробел, кириллица, %, ", <, > Обязательно (Всегда)

Где это применяется на практике?

1. GET-параметры в ссылках

Самый частый сценарий. Если вы передаете поисковый запрос в Google или другом сервисе:
Исходный запрос: search?q=коты и собаки
В браузере это станет: search?q=%D0%BA%D0%BE%D1%82%D1%8B%20%D0%B8%20%D1%81%D0%BE%D0%B1%D0%B0%D0%BA%D0%B8

2. UTM-метки

Маркетологи часто сталкиваются с поломанными ссылками, когда пытаются вставить русские слова в UTM-метки без кодирования. Правильная ссылка для кампании "Зима 2025" должна выглядеть как utm_campaign=%D0%97%D0%B8%D0%BC%D0%B0%202025.

3. Отправка форм (application/x-www-form-urlencoded)

Когда вы заполняете форму на сайте, браузер автоматически кодирует все данные в этот формат перед отправкой на сервер. Пробелы часто заменяются на + вместо %20 (это историческая особенность).


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

Почему пробел иногда превращается в "+" а иногда в "%20"?

Это зависит от стандарта. В базовом URL (путь файла) пробел должен быть %20. В параметрах запроса (после знака ?) пробел исторически кодировался плюсом +. Современные стандарты рекомендуют использовать %20 везде, но + все еще широко поддерживается.

Можно ли закодировать URL дважды?

Да, и это частая ошибка! Если закодировать %20 еще раз, знак процента превратится в %25, и вы получите %2520. При декодировании это приведет к ошибкам (появится лишний текст). Всегда проверяйте, не закодированы ли данные уже.

Влияет ли кодирование на SEO?

Поисковые системы (Google, Яндекс) прекрасно понимают закодированные URL. Ссылка site.com/wiki/%D0%9A%D0%BE%D1%82 для них равна site.com/wiki/Кот. Однако для пользователя "человекопонятные" (декодированные) ссылки выглядят приятнее в выдаче. Браузеры обычно показывают декодированный вариант в адресной строке для удобства.


Примеры кода для разработчиков

JavaScript:

// Кодирование полного URL (не трогает :// и ?)
const url = encodeURI("https://site.com/привет"); 

// Кодирование отдельного параметра (кодирует всё, включая / и ?)
const param = encodeURIComponent("привет/мир"); 

console.log(param); // %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%2F%D0%BC%D0%B8%D1%80

PHP:

// Идеально для query параметров
echo urlencode("привет мир"); // %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82+%D0%BC%D0%B8%D1%80

// Для пути URL (RFC 3986)
echo rawurlencode("привет мир"); // %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82%20%D0%BC%D0%B8%D1%80