Відсоткове кодування в URL: що насправді означають %20, + і %2F
Відсоткове кодування записує символ, який URL не може передати безпечно, як знак відсотка, за яким іде його байтове значення в шістнадцятковій системі. Пробіл стає %20, амперсанд стає %26, а скісна риска стає %2F. Кодування захищає структуру посилання, адже такі символи, як & і =, розділяють частини рядка запиту.
Які символи можна лишити як є
Стандарт URI (RFC 3986), на якому побудовані URL, не потребує кодування для букв від A до Z і від a до z, цифр і чотирьох знаків - _ . ~. Інші символи в URL мають свою роль. Двокрапка відокремлює схему від решти, скісна риска розділяє частини шляху, знак питання починає рядок запиту, решітка починає фрагмент, а & і = ділять запит на назви та значення. Символ з роллю треба кодувати тоді, коли ви маєте на увазі його як дані, а не як структуру.
Тому той самий символ можна кодувати в одному місці й не можна в іншому. У значенні параметра запиту амперсанд має бути %26, інакше посилання розірветься не там. У шляху посилання це просто символ.
Літери не з англійського алфавіту
Літери поза базовим англійським алфавітом кодуються як їхні байти в UTF-8, і кожен байт записується як відсотковий код. Літера é у слові café має два байти C3 і A9, тож вона стає %C3%A9, а все слово стає caf%C3%A9.
Простий приклад робить правила конкретними. Текст a b&c=d/é, закодований як компонент, стає a%20b%26c%3Dd%2F%C3%A9. Кодується кожен символ, який не є безпечною літерою, цифрою чи знаком: пробіл, амперсанд, знак рівності, скісна риска і літера з діакритикою.
Компонент чи весь URL
Є два види кодування, і кожен з них має своє призначення. Кодування компонента трактує кожен зарезервований символ як дані. Використовуйте його для одного значення, наприклад пошукового запиту чи назви файлу в посиланні. Якщо закодувати «rock & roll» як пошуковий запит, вийде rock%20%26%20roll, тож амперсанд залишається всередині значення.
Кодування всього URL зберігає структуру. Якщо закодувати https://example.com/a b, вийде https://example.com/a%20b, а скісні риски і двокрапка лишаються без змін. Використовуйте його для повної адреси, яку треба зробити коректною, а не для значення всередині посилання.
Саме тому в інструменті «Кодування й декодування URL» є налаштування «Компонент» і «Повний URL». Декодування повного URL також зберігає екрановані структурні символи, як-от %26 і %3D, тож посилання працює і після декодування.
Плюси і дані форм
Веб-форми використовують іншу домовленість. Коли форма надсилається як дані форми, пробіл записується як +, а не як %20. Тоді справжній знак плюс записується як %2B. Тож фраза C++ tips стає C%2B%2B+tips у даних форми і C%2B%2B%20tips у звичайному кодуванні компонента.
Декодування має таку саму різницю. У рядку запиту + зазвичай означає пробіл. У шляху посилання + є знаком плюс. Інструмент читає + як пробіл, лише коли позначено Використовувати + для пробілів (дані форми), тому вимикайте цей пункт для шляхів і для значень, де плюс є справжнім.
Як читати довгий рядок запиту
Посилання часто несе свої налаштування після знака питання. Ось приклад:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Після декодування видно, що пошук ведеться за запитом red shirt, розмір M, а тег summer+sale. %2B лишається знаком плюс, бо був закодований. Вставте посилання в інструмент «Кодування й декодування URL», і він покаже кожну назву та значення після декодування, що полегшує читання довгого посилання. Якщо потрібна лише коротша адреса без налаштувань відстеження, спершу очистіть посилання.
Подвійне кодування
Найпоширеніша помилка полягає в тому, що значення закодовано двічі. Якщо закодувати текст %20 ще раз, вийде %2520, бо сам знак відсотка кодується як %25. Сторінка тоді шукає в значенні буквальний %20, і пошук або сторінка не збігаються. Декодуйте посилання один раз, перевірте результат і кодуйте значення лише тоді, коли це справді потрібно.
Пошкоджені екранування
Знак відсотка має супроводжуватися двома шістнадцятковими цифрами, а цифри для літер із діакритикою мають утворювати коректний UTF-8. Посилання, яке обірвалося, або випадковий знак відсотка в тексті може залишити пошкоджене екранування, наприклад %E0%A4%A. Інструмент декодує те, що може, залишає пошкоджені байти точно такими, як вони були записані, і повідомляє, скільки з них не вдалося декодувати. Він не зупиняється на першій помилці.
Особливі випадки
- Пробіли в посиланні, набраному вручну. Адресний рядок браузера кодує пробіли за вас, але посилання, скопійоване в документ, може містити сирі пробіли. Закодуйте їх, перш ніж надсилати посилання далі.
- Доменні імена не англійською. Вони використовують окрему систему, punycode, і кодування шляху чи запиту не змінює назву хоста.
- Половинка емодзі. Пошкоджена копія може залишити одну половину сурогатної пари, яку не можна закодувати. Інструмент замінює її символом заміни і повідомляє про це.
- Base64 у посиланнях. Значення Base64 у посиланні підпорядковується власним правилам, де замість + і / використовуються - і _. Див. Base64 пояснено.
Як це зробити у fixmint
- Вставте текст або посилання в поле Текст або URL.
- Оберіть Кодувати або Декодувати, потім Компонент для одного значення або Повний URL для всієї адреси.
- Увімкніть Використовувати + для пробілів (дані форми) для посилань, скопійованих із веб-форми.
- Для посилання прочитайте Параметри запиту, декодовані, щоб побачити кожну назву та значення.
- Скопіюйте результат.
Короткі відповіді
Що означає %20?
Пробіл. Його байтове значення в шістнадцятковій системі дорівнює 20.
Чому в моєму посиланні є + замість %20?
Посилання, імовірно, походить із форми, де + означає пробіл. Опція «Використовувати + для пробілів (дані форми)» декодує його.
Чому я бачу %2520 у посиланні?
Значення закодовано двічі. Знак відсотка з %20 було закодовано ще раз як %25. Декодуйте один раз, щоб отримати %20, і ще раз, щоб отримати пробіл.
Переклад з Англійський оригінал за допомогою ШІ.
Коментарі
Коментарів поки немає. Будьте першим.


