URL кодировщик

Работает офлайнНичего не загружаетсяБесплатно, без регистрации

Кодируйте и декодируйте URL, убирайте параметры отслеживания из присланной ссылки и разбирайте любой адрес на части — с выбором между целым URL и отдельным компонентом.

Два кодировщика рядом

ВводЦелый URLКомпонент
https://a.com/b?c=dhttps://a.com/b?c=dhttps%3A%2F%2Fa.com%2Fb%3Fc%3Dd
hello worldhello%20worldhello%20world
a&ba&ba%26b

Средняя строка — это случай, где оба совпадают: пробел экранируется одинаково. А почему компонентное кодирование — правильный выбор по умолчанию при сборке строки запроса, показывает последняя строка: ?tag=a&b читается как два параметра, а ?tag=a%26b — как один параметр, в значении которого есть амперсанд.

Не-ASCII символы

Процентное кодирование работает с байтами, а не с символами, и URL используют UTF-8. Буква ə занимает в UTF-8 два байта, поэтому кодируется как %C9%99 — два экранирования на одну букву. Символы за пределами базовой многоязычной плоскости, включая большинство эмодзи, занимают четыре байта и дают четыре экранирования: 😀 превращается в %F0%9F%98%80. Поэтому счётчик выше считает экранирования, а не символы.

Частые вопросы

Какие параметры отслеживания убирает очистка?

Всё, что начинается с utm_, pk_ или mtm_ — метки кампаний Google Analytics и Matomo, — а также идентификаторы клика, которые называют не кампанию, а конкретного человека: gclid, fbclid, msclkid, ttclid, twclid, yclid, igshid, mkt_tok, mc_eid и ещё десяток. Параметры ref и source намеренно остаются: многие сайты по ним маршрутизируют, а очистка, ломающая ссылки, хуже той, что пропускает пару меток.

Зачем их убирать?

Ссылка из рассылки или рекламы часто содержит идентификатор именно вас, а не кампании. Перешлёте её в общий чат — и каждый, кто откроет, будет засчитан как вы; вставите в документ — она останется там навсегда. Заодно ссылка становится короче и читаемее, и на всех проверенных сайтах открывается ровно та же страница.

Чем encodeURI отличается от encodeURIComponent?

encodeURI не трогает символы, задающие структуру URL — слеши, вопросительные знаки, амперсанды, — поэтому им кодируют адрес целиком. encodeURIComponent экранирует и их, поэтому им кодируют одно значение, которое пойдёт в параметр запроса. Выбор не той функции — самая частая ошибка с URL: значение с амперсандом молча распадается на два параметра.

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

В пути URL правильное кодирование — это %20. Плюс пришёл из отправки HTML-форм, где используется application/x-www-form-urlencoded — старая договорённость, по которой плюс означает пробел. В реальных строках запроса встречаются оба варианта, поэтому декодировщикам обычно приходится принимать и тот, и другой.

Какие символы действительно нужно кодировать?

Всё, кроме A–Z, a–z, 0–9 и четырёх знаков: дефиса, подчёркивания, точки и тильды. Зарезервированные символы вроде :/?#[]@!$&'()*+,;= несут структурный смысл и должны кодироваться, когда встречаются внутри значения, а не как разделители. Не-ASCII символы кодируются своими байтами UTF-8 — поэтому одна буква с диакритикой превращается в два экранирования.

Опасно ли двойное кодирование?

Да, и получить его случайно легко. Кодирование уже закодированной строки превращает %20 в %2520, а принимающая система, декодировав один раз, получает обратно буквальное %20. Если результат пестрит %25, где-то в цепочке закодировали дважды.

Похожие инструменты