Про URL-кодування
URL-кодування, також відоме як відсоткове кодування, — це механізм кодування інформації в уніфікованому ідентифікаторі ресурсу (URI). Воно використовується для перетворення символів, які не допускаються в URL, у формат, який можна передавати через Інтернет. Це кодування замінює небезпечні ASCII-символи знаком "%" з подальшими двома шістнадцятковими цифрами.
Поширені застосування URL-кодування
- Форматування рядків запиту в URL
- Надсилання даних форми через HTTP-запити (application/x-www-form-urlencoded)
- Створення дійсних URL зі спеціальними символами або пробілами
- Кодування не-ASCII символів в URL
- Передача складних параметрів в API та веб-сервісах
Як працює URL-кодування
URL-кодування слідує таким принципам:
- Буквено-цифрові символи (A-Z, a-z, 0-9) залишаються без змін
- Спеціальні символи, як-от пробіл, ?, &, =, %, + перетворюються на їхні відсотково-кодовані еквіваленти
- Кожен байт UTF-8 закодованого символу кодується окремо
- Символ пробілу можна кодувати як "%20" або "+" (у параметрах запиту)
- Зарезервовані символи, як-от /, :, ?, #, [ мають особливе значення в URL і можуть оброблятися по-різному залежно від їхнього контексту
encodeURI та encodeURIComponent
JavaScript надає дві функції для URL-кодування:
- encodeURI: Кодує повний URI, зберігаючи символи, які є частиною синтаксису URI (як-от /:?#[]@!$&'()*+,;=)
- encodeURIComponent: Кодує компонент URI (наприклад, значення параметра запиту), кодуючи більше символів, включаючи ті, які мають особливе значення в URI
У більшості випадків при кодуванні введення користувача або параметрів запиту, encodeURIComponent()
є безпечнішим варіантом, оскільки він забезпечує правильне кодування всіх потенційно проблемних символів.
URL-кодування для міжнародних символів
Сучасні браузери кодують не-ASCII символи за допомогою UTF-8 кодування, а потім відсотково-кодують кожен байт. Це гарантує, що міжнародні символи, емодзі та інші символи Unicode можуть бути належним чином включені в URL. Наприклад, українська літера "ї" спочатку кодується в UTF-8 як два байти (D1 97), а потім відсотково-кодується як "%D1%97".
Приклади
Звичайний текст | URL-закодований |
---|---|
Привіт Світ | %D0%9F%D1%80%D0%B8%D0%B2%D1%96%D1%82%20%D0%A1%D0%B2%D1%96%D1%82 |
https://приклад.укр/?пошук=Київ | https%3A%2F%2F%D0%BF%D1%80%D0%B8%D0%BA%D0%BB%D0%B0%D0%B4.%D1%83%D0%BA%D1%80%2F%3F%D0%BF%D0%BE%D1%88%D1%83%D0%BA%3D%D0%9A%D0%B8%D1%97%D0%B2 |
Знижка 50% на все! | %D0%97%D0%BD%D0%B8%D0%B6%D0%BA%D0%B0%2050%25%20%D0%BD%D0%B0%20%D0%B2%D1%81%D0%B5%21 |
Україна | %D0%A3%D0%BA%D1%80%D0%B0%D1%97%D0%BD%D0%B0 |