Utilia

Кодування й декодування URL

Безкоштовний кодувальник і декодувальник URL. Кодуйте параметри запиту чи повні URL, декодуйте послідовності %XX і обробляйте + як пробіл. Працює в браузері.

Режим

Як користуватися кодувальником і декодувальником URL

  1. Виберіть Закодувати, щоб перетворити текст на форму, безпечну для URL, або Декодувати, щоб повернути текст із відсотковим кодуванням до читабельних символів.
  2. Під час кодування виберіть Режим: Компонент для окремого значення (наприклад, параметра запиту чи сегмента шляху) або Повний URL, щоб закодувати цілу адресу, зберігши її структуру.
  3. Під час декодування даних із форми HTML чи рядка запиту ввімкніть Трактувати + як пробіл, щоб знаки + стали пробілами.
  4. Вставте текст і скопіюйте результат. Якщо відсоткова послідовність некоректна, інструмент повідомить про помилку, а не вгадуватиме.

Що таке кодування URL?

URL можуть містити лише обмежений набір символів ASCII. Деякі символи, як-от /, ?, #, & та =, зарезервовані, бо розділяють частини адреси: шлях, рядок запиту й фрагмент. Інші, як-от пробіли, лапки, літери з діакритикою чи емодзі, просто не дозволені. Кодування URL, також зване відсотковим кодуванням, розв’язує обидві проблеми, замінюючи кожен проблемний байт на % і дві шістнадцяткові цифри.

Спершу текст перетворюється на байти UTF-8, і кожен байт кодується окремо. Пробіл стає %20, амперсанд – %26, літера é (два байти в UTF-8) – %C3%A9, а емодзі 😀 (чотири байти) – %F0%9F%98%80. Незарезервовані символи, тобто літери, цифри та - _ . ~, кодувати ніколи не потрібно. Українські літери також займають по два байти, тож «ї» перетворюється на %D1%97.

Режим «Компонент» чи «Повний URL»

Вибір правильного режиму – найважливіше рішення, а помилка тут – класичне джерело багів.

Режим «Компонент» працює як encodeURIComponent у JavaScript. Він кодує кожен зарезервований символ, тож результат можна безпечно вставити в одну частину URL. Використовуйте його для значень параметрів запиту, сегментів шляху чи всього, що ввів користувач. Наприклад, пошуковий запит rock & roll стає rock%20%26%20roll. Якби ви не закодували &, сервер прочитав би roll як початок нового параметра.

Режим «Повний URL» працює як encodeURI. Він припускає, що вхідні дані вже є повною адресою, і зберігає символи, що надають їй структуру, як-от : / ? # & та =, кодуючи пробіли й символи не з ASCII. Використовуйте його, щоб привести адресу на кшталт https://example.com/café menu?q=tea до вигляду https://example.com/caf%C3%A9%20menu?q=tea. Не застосовуйте його до окремих значень: & усередині значення лишиться незакодованим і зламає рядок запиту.

Хороше правило: збирайте URL із частин, кодуйте кожне значення в режимі «Компонент» і використовуйте «Повний URL» лише для адрес, які ви отримуєте вже зібраними.

Знак + і кодування форм

Форми HTML, надіслані з application/x-www-form-urlencoded, кодують пробіли як + замість %20. Тому пошукові URL часто виглядають як ?q=hello+world. Стандартне відсоткове декодування залишає + без змін, бо в шляху плюс – це просто плюс. Під час декодування рядка запиту чи даних форми ввімкніть Трактувати + як пробіл, щоб отримати hello world. Залиште вимкненим для шляхів і значень, де важливий буквальний +, як-от номери телефонів чи дані Base64. Справжній знак плюс у даних форми надсилається як %2B, тож у будь-якому разі декодується правильно.

Приватність

Кодування й декодування виконуються цілком у вашому браузері. Нічого з того, що ви вставляєте, зокрема URL, які можуть містити токени, ідентифікатори сеансів чи персональні дані, не надсилається на сервер і не зберігається.

Поширені запитання

Чому декодування завершується помилкою «некоректне кодування»?

Після % мають іти рівно дві шістнадцяткові цифри, а отримані байти мають утворювати коректний UTF-8. Рядки на кшталт 100%, %G1 чи обірвана послідовність %E2%82 не можна надійно декодувати, тому інструмент повідомляє про проблему, а не видає хибний текст. Щоб вставити буквальний знак відсотка, закодуйте його як %25.

Чим відрізняються %20 і +?

Обидва можуть позначати пробіл, але в різних контекстах. %20 дійсний усюди в URL. + означає пробіл лише в рядках запиту, закодованих як форма; в інших місцях це буквальний знак плюс.

Чи варто кодувати цілий URL у режимі «Компонент»?

Лише якщо весь URL сам є значенням усередині іншого URL, наприклад параметром redirect=. У такому разі режим «Компонент» саме те, що треба: https://a.com/?x=1 стає https%3A%2F%2Fa.com%2F%3Fx%3D1.

Чому мій текст закодовано двічі?

Подвійне кодування виникає, коли вже закодований текст кодують знову, і %20 стає %2520. Один раз декодуйте для перевірки й переконайтеся, що кожне значення кодується лише в момент вставлення в URL.

Чи приховує або захищає кодування URL дані?

Ні. Відсоткове кодування повністю оборотне й не забезпечує безпеки. Чутливі значення в URL можуть потрапити в історію браузера та журнали серверів, тому взагалі не розміщуйте секрети в URL.