URL-кодування (percent-encoding): що це і як декодувати

- URL-кодування (percent-encoding) замінює «небезпечні» символи на комбінацію з знака % і двох шістнадцяткових цифр, наприклад, пробіл перетворюється на %20.
- Кодувати потрібно пробіли, кирилицю, спецсимволи (?, &, #, =, /) і все, що може порушити структуру адреси.
- Кирилиця кодується за кодуванням UTF-8: одна російська буква займає 2 байти і перетворюється на 6 символів виду %D0%9F.
- Декодування — зворотний процес: %20 знову стає пробілом, а %D0%9F — буквою «П».
Ви напевно бачили адреси, де замість звичних букв миготять загадкові «%D0%BF%D1%80%D0%B8» і знаки відсотка. Це не помилка і не поломка — так працює URL-кодування, механізм, який дозволяє передавати в веб-адресах пробіли, російські букви і спеціальні символи без ризику «зламати» посилання. У цій статті простими словами розберемо, що таке percent-encoding, навіщо воно потрібно, які символи обов'язково кодувати і як виконати зворотне перетворення — декодування.
Кодуйте та декодуйте URL онлайн — безкоштовно
Що таке URL-кодування
URL-кодування, також відоме як percent-encoding («процентне кодування»), — це спосіб представити будь-який символ в адресі сторінки за допомогою безпечного набору знаків. Стандарт адресів (RFC 3986) дозволяє використовувати в URL лише обмежений алфавіт: латинські літери A–Z та a–z, цифри 0–9 та кілька знаків (- _ . ~). Усе інше — пробіли, кирилиця, лапки, дужки — вважається «небезпечним» і повинно бути закодовано.
Це працює так: програма бере байт символу, переводить його в шістнадцяткове число і підставляє перед ним знак відсотка. Пробіл має код 32, в шістнадцятковій системі це 20, тому в адресі пробіл виглядає як %20. Саме через знак відсотка метод і отримав свою назву.
Навіщо кодувати URL
Головна причина — надійність передачі даних. Адреса має сувору структуру, де певні символи виконують роль роздільників: питання відокремлює параметри, амперсанд розділяє пари «ключ=значення», решітка вказує на якорь. Якщо користувач введе в пошуковий рядок сайту слово з амперсандом або пробілом, а ви вставите його в посилання «як є», браузер або сервер зрозуміють адресу неправильно.
Ось типові ситуації, коли кодування обов'язкове:
- Пробіли. В адресі їх бути не повинно — вони перетворюються в %20 (або, в параметрах форми, в знак +).
- Кирилиця та інші національні алфавіти. Російські літери не входять до базового набору ASCII, тому кодуються побайтово.
- Спеціальні символи-роздільники. Якщо ? & = # / є частиною самих даних, а не структури адреси, їх потрібно закодувати, інакше сенс посилання спотвориться.
- Знаки препинання та символи. Кавички, дужки, відсотки, плюси — все це також кодується, щоб адреса залишалася однозначною.
Які символи кодуються
Простіше запам'ятати навпаки: не кодуються тільки «безпечні» символи. Це латиниця, цифри та знаки - _ . ~ (їх називають unreserved). Все інше або є службовим (reserved), або небезпечним і підлягає кодуванню, якщо використовується як звичайні дані. Нижче — таблиця частих прикладів.
| Символ | Код | Пояснення |
|---|---|---|
| пробіл | %20 | в параметрах форми може бути + |
| ! | %21 | знак оклику |
| # | %23 | решітка (якір) |
| % | %25 | сам знак процента |
| & | %26 | амперсанд (роздільник параметрів) |
| + | %2B | плюс |
| / | %2F | слеш |
| = | %3D | дорівнює |
| ? | %3F | знак питання |
| П | %D0%9F | кирилиця, 2 байта UTF-8 |
Як кодується кирилиця
З російськими літерами пов'язана найчастіша плутанина. На відміну від латиниці, де одна літера — один байт, кирилиця в кодуванні UTF-8 займає по два байти на символ. Тому одна літера перетворюється на шість знаків: два байти, кожен у вигляді %XX. Наприклад, слово «привіт» кодується як %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82.
Важливо, щоб і кодування, і декодування виконувались в одному кодуванні — сьогодні це майже завжди UTF-8. Якщо сайт використовує інше кодування (наприклад, застаріле Windows-1251), ті ж літери дадуть зовсім інші послідовності, і при неправильному декодуванні замість тексту ви побачите «кракозябри». Тому сучасний веб стандартизований на UTF-8.
Як декодувати URL
Декодування — це зворотна операція. Алгоритм шукає в рядку кожну конструкцію виду %XX, переводить шістнадцяткове число назад у байт і відновлює вихідний символ. Так %20 знову стає пробілом, а пара %D0%9F збирається в літеру «П». Робити це вручну за таблицею довго, тому зазвичай використовують готові інструменти.
Способи декодувати (і закодувати) адресу:
- Онлайн-інструменти — вставляєте рядок, отримуєте результат в один клік, нічого встановлювати не потрібно.
- JavaScript — функції encodeURIComponent() та decodeURIComponent() кодують і декодують окремі значення; encodeURI() та decodeURI() працюють з адресою цілком.
- PHP — функції urlencode()/urldecode() для параметрів форм та rawurlencode()/rawurldecode() для строгого percent-encoding.
- Python — модуль urllib.parse з методами quote() та unquote().
Практична порада: кодуйте тільки окремі значення параметрів, а не готову адресу цілком. Інакше службові роздільники на кшталт ? та & також закодуються, і посилання перестане працювати. Для окремого значення в JavaScript підходить encodeURIComponent(), а для збору всієї адреси — encodeURI().
Часті питання
Що означає %20 у посиланні?
Це закодований пробіл. Код пробілу — 32, в шістнадцятковій системі це 20, тому в адресі він записується як %20. У параметрах веб-форм пробіл іноді замінюється знаком «плюс» (+).
Чому російські букви в URL виглядають як %D0%BF?
Кирилиця кодується за стандартом UTF-8, де кожна буква займає два байти. Кожен байт записується як знак процента і дві шістнадцяткові цифри, тому одна російська буква перетворюється на шість символів виду %D0%BF.
Чи потрібно кодувати всю адресу чи тільки її частину?
Кодують тільки значення — наприклад, текст пошукового запиту або ім'я файлу. Службові символи, що відокремлюють частини адреси (?, &, /, =), повинні залишатися незакодованими, інакше браузер не зрозуміє структуру посилання.
Чим відрізняється кодування від декодування?
Кодування перетворює звичайні символи в безпечний запис виду %XX, а декодування виконує зворотне перетворення — відновлює з %XX початкові пробіли, літери та знаки. Це дві сторони одного механізму percent-encoding.
Кодуйте та декодуйте URL онлайн — безкоштовно
Оновлено: 9 липня 2026 р. Редакція MegaInet.art.



