Все статьи

URL Encode/Decode: percent-encoding в ссылках

Ссылку с кириллическим текстом — товар на Wildberries, пост во «ВКонтакте», статья в поиске — нельзя вставить в адресную строку «как есть»: пробелы, &, ? и сами кириллические буквы должны быть закодированы в percent-encoding, иначе сервер прочитает адрес неправильно или вовсе оборвёт его.

Почему кириллица «весит» в шесть раз больше

Каждая русская буква сначала превращается в 2 байта UTF-8, а затем каждый байт записывается как %XX — то есть одна буква «я» становится %D1%8F, шесть символов вместо одного. Поисковый запрос «купить диван» в query-строке легко превращается в полсотни символов percent-encoding, из-за чего ссылки, скопированные из адресной строки для отправки в мессенджер, выглядят пугающе длинными.

encodeURIComponent и encodeURI — не одно и то же

encodeURIComponent кодирует вообще все спецсимволы, включая &, ?, = и /, поэтому годится только для одного значения параметра — например, поискового запроса, который потом подставляется в ?q=. encodeURI сохраняет структурные символы адреса и предназначена для кодирования уже собранного URL целиком, с путём и query-строкой.

Частая ошибка с UTM-метками

Если рекламная ссылка с параметрами utm_source, utm_campaign и кириллическим значением собирается вручную и разработчик по ошибке кодирует всю строку после ? через encodeURIComponent, символы & и = между параметрами тоже превратятся в %26 и %3D — рекламная система получит один нечитаемый параметр вместо набора меток, и статистика по кампании сломается.

Когда это нужно

  • Формирование ссылки с кириллическим поисковым запросом или названием товара в параметре.
  • Проверка, что 1С или другая система корректно собрала ссылку с кириллицей в пути.
  • Декодирование ссылки из лога сервера, где вместо текста видны только %D0%....

Edge case: двойное кодирование в редиректах

Ссылки-редиректы (например, из письма рассылки или трекера кликов) иногда кодируют уже закодированный адрес ещё раз — тогда символ % сам становится %25, и вместо кириллицы получается двойная каша вида %25D0%25A1. Такое часто случается, когда один сервис передаёт ссылку другому, а оба самостоятельно вызывают кодирование, не проверяя, закодирована ли строка уже.

Попробовать инструмент