URL кодировщик
Кодируйте и декодируйте URL, убирайте параметры отслеживания из присланной ссылки и разбирайте любой адрес на части — с выбором между целым URL и отдельным компонентом.
Два кодировщика рядом
| Ввод | Целый URL | Компонент |
|---|---|---|
| https://a.com/b?c=d | https://a.com/b?c=d | https%3A%2F%2Fa.com%2Fb%3Fc%3Dd |
| hello world | hello%20world | hello%20world |
| a&b | a&b | a%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, где-то в цепочке закодировали дважды.
Похожие инструменты
- Конструктор схем и блок-схемРисуйте блок-схемы и диаграммы, соединяйте блоки стрелками, которые прокладывают себя сами, и раскладывайте всё автоматически. Экспорт в SVG.
- Генератор паролейСоздавайте надёжные пароли криптографическим генератором браузера с оценкой стойкости.
- HTML-сущностиКодируйте текст для HTML или декодируйте сущности обратно — ломающие разметку знаки, именованные наборы, числовые ссылки до эмодзи. Ровно один проход.