URL-кодувальник: Екрануйте спеціальні символи в URL-адресах онлайн безкоштовно
Безкоштовний інструмент для екранування рядків URL для миттєвого кодування спеціальних символів. Перетворення пропусків, Unicode та символів у відсотково-закодований формат. Ідеально підходить для API, веб-форм та міжнародних URL-адрес. Спробуйте зараз!
Екранування рядка URL
Документація
Кодування URL: що це таке і як воно працює
Кодування URL, яке також називають відсотковим кодуванням, — це спосіб подання символів у вебадресі за допомогою лише невеликого набору безпечних ASCII-символів. Воно працює шляхом заміни небезпечного символу знаком %, за яким ідуть дві шістнадцяткові цифри. Цей інструмент екранування рядків URL кодує текст так само, як вбудована функція JavaScript encodeURIComponent.
Навіщо URL потрібне кодування
URL може містити лише обмежений набір символів: літери, цифри та кілька розділових знаків. Пробіли, літери з діакритичними знаками, символи нелатинських абеток і такі символи, як & або =, можуть пошкодити URL або змінити його значення, якщо вони містяться в ньому без кодування. Наприклад, пробіл у посиланні може спричинити те, що браузер або сервер прочитає URL як дві окремі частини. Відсоткове кодування замінює ці символи кодом, який усі браузери й сервери можуть однаково прочитати.
Символи, які цей інструмент залишає без змін
Цей інструмент ніколи не змінює наведені нижче символи. Вони проходять безпосередньо:
- Великі й малі літери:
A–Z,a–z - Цифри:
0–9 - Розділові знаки
-._~!*'()
Усі інші символи кодуються у відсотковому форматі, зокрема:
- Пробіл і такі розділові знаки, як
:/?#[]@$&+,;= - Літери з діакритичними знаками та будь-які інші не-ASCII-символи або символи Unicode
- Сам буквальний символ
%, який завжди перетворюється на%25, навіть якщо він уже був частиною послідовності з відсотковим кодуванням
У деяких загальних посібниках із синтаксису URL символи ! * ' ( і ) об’єднують з іншими розділовими знаками як символи, які «може знадобитися кодувати» у певних контекстах. Цей конкретний інструмент їх не кодує, оскільки дотримується набору правил encodeURIComponent, де вони вважаються безпечними.
Як обчислити рядок із відсотковим кодуванням (формула)
Інструмент перевіряє кожен символ вхідних даних по одному та застосовує таке правило:
- Якщо символ належить до наведених вище символів, які не змінюються, залишити його без змін.
- В іншому разі перетворити символ на його послідовність байтів UTF-8. Літери латинки з діакритичними знаками, грецькі, кириличні та арабські літери використовують два байти. Китайські, японські та корейські символи використовують три. Емодзі використовують чотири.
- Записати кожен байт як двозначне шістнадцяткове число.
- Поставити
%перед кожною шістнадцятковою парою. - Об’єднати результати по порядку, щоб утворити закодований рядок.
Приклад обчислення
Вхідні дані: Jürgen & Björk
Покроковий розбір за символами:
| Символ | Результат |
|---|---|
J | J (без змін) |
ü | %C3%BC (байти UTF-8 0xC3, 0xBC) |
rgen | rgen (без змін) |
(пробіл) | %20 |
& | %26 |
(пробіл) | %20 |
Bj | Bj (без змін) |
ö | %C3%B6 (байти UTF-8 0xC3, 0xB6) |
rk | rk (без змін) |
Результат: J%C3%BCrgen%20%26%20Bj%C3%B6rk
Другий приклад демонструє роботу набору символів, які не змінюються. Кодування рядка -_.!~*'() дає -_.!~*'() — точнісінько такий самий текст, оскільки кожен його символ належить до набору незарезервованих символів. Кодування рядка 100% дає 100%25, оскільки сам знак % не є безпечним символом.
Декодування рядка з відсотковим кодуванням
Декодування є зворотним процесом: кожна послідовність %XX читається як шістнадцятковий байт, байти знову групуються в початковий символ UTF-8, і цей символ замінює послідовність. Наприклад, %C3%BC декодується назад у ü, а %20 декодується в пробіл. Цей інструмент лише кодує; для зворотного процесу потрібен окремий декодер.
Поширені способи використання
Відсоткове кодування застосовують щоразу, коли текст, введений людиною, а не написаний програмістом, потрібно включити до URL:
- Поля пошуку, які вставляють пошуковий запит в адресний рядок, наприклад
?q=shoes%20%26%20bags - Параметри запиту, що містять імена, адреси або інші дані користувача
- Посилання на сторінки із заголовками мовами, у яких використовуються літери з діакритичними знаками або нелатинські системи письма
- Запити до API, у яких токени або ідентифікатори передаються як частина URL
Приклади коду
1// JavaScript
2encodeURIComponent("Jürgen & Björk");
3// "J%C3%BCrgen%20%26%20Bj%C3%B6rk"
41# Python
2import urllib.parse
3urllib.parse.quote("Jürgen & Björk", safe="!*'()")
4# 'J%C3%BCrgen%20%26%20Bj%C3%B6rk'
5quote у Python завжди залишає без змін літери, цифри та - . _ ~. П’ять додаткових
символів ! * ' ( ) потрібно перелічити в safe, щоб отримати результат, як у цьому інструменті. Без
них quote натомість повертає %21 %2A %27 %28 %29.
Історія
Ідея кодування небезпечних символів у URL бере початок із RFC 1738, опублікованого у (4 410 см) 1994 році, — одного з перших документів, що визначили формат URL. RFC 3986, опублікований у 2005 році, оновив правила та формально визначив набір «незарезервованих» символів, які ніколи не потрібно кодувати. encodeURIComponent — функція JavaScript, на якій ґрунтується цей інструмент, дотримується дещо ширшого набору незарезервованих символів, ніж RFC 3986: вона також залишає без кодування ! * ' ( і ), як це було в попередній версії специфікації URI.
Поширені запитання
У чому різниця між кодуванням URL та екрануванням URL?
Це одне й те саме. Обидва терміни описують відсоткове кодування, за якого символ замінюється на %, після якого йдуть дві шістнадцяткові цифри.
Чому !, *, ', ( і ) залишаються без змін у цьому інструменті?
Цей інструмент використовує encodeURIComponent, який вважає ці п’ять символів безпечними й залишає їх саме такими, як їх введено. Інші функції кодування та деякі сервери можуть усе ж очікувати, що вони будуть закодовані, тому в разі проблеми слід перевірити цільову систему.
У чому різниця між %20 і + для позначення пробілу?
Обидва позначають пробіл. %20 — загальний спосіб відсоткового кодування пробілу. Знак + є спеціальним випадком, який використовується лише всередині даних application/x-www-form-urlencoded — формату, що застосовується під час надсилання HTML-форм, а не цим інструментом.
Чи декодує цей інструмент текст, який уже було закодовано?
Ні. Він лише кодує. Якщо вхідні дані вже містять знак %, цей % сприймається як буквальний символ і у вихідних даних перетворюється на %25, а не залишається без змін.
Як обробляються нелатинські символи, наприклад китайський або арабський текст?
Кожен символ спочатку перетворюється на послідовність байтів UTF-8, після чого кожен байт кодується у відсотковому форматі. Китайський символ використовує три байти, тому утворює три групи %XX. Арабська літера використовує два байти, тому утворює дві групи.
Коли інструмент відмовляється кодувати текст? Лише тоді, коли текст містить половину сурогатної пари. Сурогатна пара — це двокомпонентний код, у якому зберігається символ із кодом понад U+FFFF, наприклад емодзі. Окрема половина не має коректного представлення UTF-8, тому інструмент показує помилку замість результату. Під час звичайного введення таке не виникає; зазвичай ця ситуація є наслідком обрізаного копіювання або пошкодженого посилання.
Чи слід кодувати весь URL або лише його частину?
Кодувати слід лише частини, що містять дані користувача, наприклад значення параметрів запиту або сегменти шляху, а не частини, які утворюють структуру URL, такі як https:// і доменне ім’я. Кодування повного URL засобом кодування компонентів також перетворило б його символи :, / і ? на відсоткові коди, що пошкодило б адресу.