DEV

URL-кодування: навіщо воно потрібне і як працює

Навіщо кодувати URL?

URL може містити лише певний набір ASCII-символів. Пробіли, кирилиця, спецсимволи та інші символи повинні бути закодовані у форматі відсотків (%XX, де XX — шістнадцятковий код байта UTF-8). Наприклад, пробіл стає %20, а символ «©» — %C2%A9. Без кодування браузер або сервер може некоректно інтерпретувати URL.

encodeURI vs encodeURIComponent

encodeURI() кодує URL цілком, залишаючи незміненими символи, що мають спеціальне значення в URL: :, /, ?, #, &, =. encodeURIComponent() кодує всі спецсимволи, включаючи їх — підходить для кодування значень параметрів запиту. Плутанина між ними — поширена помилка у веб-розробці.

Форма-кодування

Дані HTML-форм кодуються у форматі application/x-www-form-urlencoded: пробіли замінюються на +, а не %20. Це трохи відрізняється від стандартного URL-кодування. При роботі з API важливо знати, який формат очікує сервер.

Кирилиця в URL

Сучасні браузери автоматично кодують не-ASCII символи в адресному рядку. Тим не менш, у коді завжди явно кодуйте нелатинські символи. IDN (Internationalised Domain Names) використовують Punycode для представлення нелатинських доменів: «тест.укр» перетворюється на «xn--e1aybc.xn--j1amh».