UltKit
Зображення11
PDF13
Документи й дані7
Відео6
Аудіо4
Інші інструменти22

Кодування й декодування URL

Зробіть текст безпечним для вставлення в URL або перетворіть послідовності на кшталт %20 назад на читабельні символи. Інструмент використовує вбудовані в браузер encodeURIComponent, encodeURI і decodeURIComponent, показує параметри запиту в таблиці й нічого не надсилає на сервер.

Режим

0 символів · 0 слів · 0 рядків

0 символів · 0 слів · 0 рядків

Працює повністю у вкладці браузера. Ваш текст ніколи не завантажується на сервер і не зберігається.

Що екранує кожна функція

Обчислено самими функціями браузера. encodeURIComponent не змінює літери, цифри та ці знаки: ! ' ( ) * - . _ ~

СимволencodeURIComponentencodeURI
(пробіл)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

Відсоткове кодування та зарезервовані символи RFC 3986

URL може містити лише обмежений набір символів ASCII. RFC 3986, специфікація синтаксису URI 2005 року, поділяє їх на дві групи. Незарезервовані символи, A–Z, a–z, 0–9 і чотири знаки - . _ ~, кодувати ніколи не потрібно. Зарезервовані символи мають своє призначення: загальні роздільники : / ? # [ ] @ відокремлюють схему, хост, шлях, запит і фрагмент, а піdроздільники ! $ & ' ( ) * + , ; = розділяють елементи всередині них, як & і = у рядку запиту. Усе інше, а також будь-який зарезервований символ, використаний як звичайні дані, потрібно закодувати за допомогою відсоткового кодування.

Відсоткове кодування записує байт як % і дві шістнадцяткові цифри. Спершу текст перетворюється на UTF-8, тож пропуск стає %20, літера é (два байти) стає %C3%A9, а емодзі стає чотирма групами %XX. Саме тому пошуковий запит "café & bar" потрапляє в посилання як caf%C3%A9%20%26%20bar: символ & кодується, щоб сервер не сприйняв його як початок нового параметра.

encodeURIComponent, encodeURI і декодування

encodeURIComponent підходить для окремої частини: значення запиту, сегмента шляху або URL перенаправлення, переданого як параметр. Він екранує все, крім незарезервованих символів і ! ' ( ) *, які JavaScript залишає без змін з історичних причин. encodeURI (весь URL) виходить з того, що вхідні дані вже є повною адресою, і зберігає зарезервовані символи, тож у https://example.com/a b?q=1 кодується лише пропуск. Застосувати encodeURI до значення параметра — класична помилка: & або # усередині значення залишиться й зламає URL.

Декодувати скасовує будь-яку з цих функцій. HTML-форми, надіслані методом GET, використовують старіший формат application/x-www-form-urlencoded, у якому пропуск записується як +, а не %20; для таких випадків залиште позначеним пункт Вважати + пропуском, а зніміть позначку, коли важливий буквальний плюс, наприклад у номері телефону. Якщо у вхідних даних є % без двох шістнадцяткових цифр після нього або байти, що не є коректним UTF-8, декодування завершиться зрозумілим повідомленням про помилку, а не здогадками. Якщо в тексті є рядок запиту, його параметри відображаються декодованими в таблиці під інструментом. Для двійкових даних в URL зазвичай використовують Base64url.

Поширені запитання

Як кодувати пробіл в URL: %20 чи знаком плюс?
У шляхах і за RFC 3986 пропуск — це %20. Форма з + означає пропуск лише в рядках запиту, закодованих так, як кодують HTML-форми, тому %20 — безпечний вибір усюди.
Чому в моєму URL з’явилося %2520?
Його закодовано двічі. Першого разу пропуск став %20, а вдруге сам символ % закодувався як %25. Декодуйте один раз, щоб прибрати зайвий шар, і кодуйте значення лише в одному місці коду.
Які символи ніколи не потребують відсоткового кодування?
Незарезервований набір за RFC 3986: літери від A до Z обох регістрів, цифри від 0 до 9, а також дефіс, крапка, підкреслення й тильда.
Чи може URL містити кирилицю та інші нелатинські літери без кодування?
Браузери показують їх як є, але під час передавання кожен не-ASCII символ у шляху чи запиті надсилається як UTF-8 з відсотковим кодуванням. Доменні імена використовують окрему систему, Punycode, яка перетворює їх на мітки xn--.
Чому під час декодування з’являється помилка про неправильну послідовність?
У тексті є % без двох шістнадцяткових цифр після нього, наприклад буквальне "100%", або байти декодуються в некоректний UTF-8. Закодуйте окремі символи % як %25 перед декодуванням.