Полное руководство по URL кодированию (Percent-Encoding)
URL-кодирование (или процентное кодирование) — это фундаментальный механизм Интернета, который позволяет безопасно передавать информацию через URL-адреса. В отличие от простого текста, URL-адреса имеют строгие ограничения: они могут содержать только ограниченный набор символов US-ASCII (латинские буквы, цифры и несколько знаков препинания).
Любой символ за пределами этого набора — например, пробел, кириллица ("Привет"), эмодзи или специальные символы (&, =) —
должен быть преобразован в безопасный формат, понятный любому веб-серверу в мире.
Как пользоваться инструментом
- Кодирование: Введите обычный текст (например, поисковый запрос или ссылку с русскими буквами) и нажмите "Кодировать". Инструмент заменит все опасные символы на %XX.
- Декодирование: Вставьте ссылку, полную непонятных знаков вроде
%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82, и нажмите "Декодировать", чтобы увидеть исходный текст.
Технические детали: Как это работает?
Стандарт RFC 3986 определяет, как именно должно происходить кодирование. Процесс состоит из двух шагов:
- Конвертация в байты: Сначала символ преобразуется в последовательность байтов согласно кодировке UTF-8. Например, русская буква «А» в UTF-8 занимает 2 байта:
D0и90. - Процентная запись: Каждому байту приписывается знак процента
%. В итоге «А» превращается в%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