Що це за інструмент?
Кодування URL (процентне кодування) замінює символи, недопустимі в URL, на % з подальшим значенням байта в шістнадцятковому вигляді — пробіл стає %20, а 你 стає %E4%BD%A0. Без цього такі символи, як пробіли, &, ? і нелатинський текст, порушили б структуру URL або були б неправильно інтерпретовані сервером.
Є дві поширені потреби, і цей інструмент підтримує обидві: кодування значення, що йде всередину параметра запиту (режим компонента — кодує також / ? & =), та кодування цілого URL зі збереженням його структури (режим повного URL — залишає :// ? & недоторканими).
Одна історична дивність, яку варто знати: пробіл згідно зі стандартом URL правильно кодується як %20 (RFC 3986), але надсилання HTML-форм традиційно кодує його як знак плюс — саме тому в дикій природі трапляються і q=hello%20world, і q=hello+world, і чому при декодуванні даних форми плюс іноді потрібно обробляти окремо.
Навіщо його використовувати?
- Безпечно будуйте рядки запитів — введені користувачем дані з &, = чи пробілами не зламають ваш URL.
- Декодуйте довгі закодовані URL з логів, аналітики чи ланцюжків редиректів, щоб побачити, що вони насправді означають.
- Коректна обробка UTF-8 для китайської мови, емодзі та іншого нелатинського тексту.
- Два режими, щоб ви випадково не закодували : і / у цілому URL.
- Безкоштовно, миттєво, без завантаження.
Як користуватися
- Вставте свій текст чи URL у поле введення.
- Оберіть режим: "Компонент" для значень, що йдуть у параметри запиту, "Повний URL" для цілих URL.
- Натисніть "Закодувати" або "Декодувати".
- Скопіюйте результат.
Приклад
Введення
https://example.com/search?q=hello world & 你好Результат
Режим компонента: https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world%20%26%20%E4%BD%A0%E5%A5%BD
Режим повного URL: https://example.com/search?q=hello%20world%20&%20%E4%BD%A0%E5%A5%BDРежим компонента кодує й структурні символи; режим повного URL зберігає їх.
Типові випадки використання
- Побудова URL для поширення, де пошуковий запит чи значення фільтра надходить від користувача й може містити пробіли, & чи інші спеціальні символи.
- Декодування довгого відстежувального чи редиректного URL з листа чи рекламної кампанії, щоб побачити реальну адресу призначення й параметри перед натисканням.
- Пошук причини, чому сервер неправильно читає параметр запиту — часто винен зарезервований символ, який слід було закодувати, але не закодували.
- Підготовка неанглійського (китайського, японського, арабського тощо) значення для використання в рядку запиту URL.
encodeURIComponent проти encodeURI на практиці
Це напряму відповідає двом режимам цього інструмента і відповідає реальним функціям JavaScript, які вже знайомі розробникам: encodeURIComponent (режим компонента) кодує все, крім невеликого набору незарезервованих символів, роблячи його безпечним для будь-якого одного значення, що вставляється в URL — саме це варто використовувати для параметра запиту, сегмента шляху чи значення хеш-фрагмента. encodeURI (режим повного URL) залишає структурні символи URL (:, /, ?, #, &, =) недоторканими, оскільки припускає, що ви кодуєте цілий, уже структурований URL, а не необроблене значення — використання його для одного значення параметра не змогло б закодувати символи & чи =, які це значення може містити, що є найпоширенішою помилкою при виборі неправильного режиму.
Зарезервовані проти незарезервованих символів
Специфікація URL (RFC 3986) поділяє символи на дві групи: незарезервовані символи (літери, цифри, - _ . ~) завжди безпечні й ніколи не кодуються, тоді як зарезервовані символи (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) мають особливе значення в структурі URL і потребують кодування лише тоді, коли з'являються як буквальні дані, а не структурна пунктуація. Саме тому й існують два режими — режим компонента трактує зарезервовані символи як дані, які потрібно захистити, режим повного URL трактує їх як структуру, яку потрібно зберегти. Розуміння цієї відмінності корисніше, ніж запам'ятовування, коли який режим використовувати, оскільки воно пояснює, чому той самий символ (як &) іноді кодується, а іноді залишається без змін — залежно від того, яку роль він виконує в конкретному URL.
Часті запитання
Коли варто використовувати режим компонента, а коли режим повного URL?
Режим компонента (encodeURIComponent) — коли кодуєте одне значення, що йде всередину параметра запиту: він кодує /, ?, & та =, щоб вони не могли зламати URL. Режим повного URL (encodeURI) — коли кодуєте цілий URL: він зберігає структурні символи, щоб URL і далі працював.
Чому замість + для пробілів з'явився %20?
Обидва варіанти правильні в різних контекстах. %20 — універсальне процентне кодування пробілу; + означає пробіл лише всередині рядків запиту в старішому форматі application/x-www-form-urlencoded. Цей інструмент використовує %20, який працює всюди.
Чому декодування завершується помилкою?
Вхідні дані містять неправильно сформовану процентну послідовність, наприклад % без двох наступних шістнадцяткових цифр. Це часто трапляється, коли URL було обрізано чи двічі декодовано. Виправте або видаліть пошкоджену послідовність %.
Що таке подвійне кодування?
Кодування вже закодованого тексту: %20 стає %2520, оскільки сам % кодується в %25. Це поширена помилка — якщо ваш декодований результат досі містить коди %, декодуйте його ще раз.
Чи обробляє це китайські символи та емодзі?
Так. Текст кодується як байти UTF-8, тож 你好 стає %E4%BD%A0%E5%A5%BD і декодується назад бездоганно — так само, як роблять браузери.