Усі статті

URL Encode/Decode: percent-encoding у посиланнях

URL-адреса має суворий синтаксис: символи на кшталт пробілу, &, ?, # чи кирилиці мають спеціальне значення або взагалі недопустимі в «сирому» вигляді. Percent-encoding (URL Encode) замінює такі символи на послідовність %XX, де XX — шістнадцятковий код байта.

Як це працює

Кожен небезпечний байт замінюється на знак відсотка та двозначний шістнадцятковий код. Наприклад, пробіл стає %20, а символ &%26. Символи Unicode (наприклад, кирилиця) спершу кодуються в UTF-8, а вже потім кожен байт результату записується як %XX.

encodeURIComponent проти encodeURI

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

Типова помилка

Якщо закодувати весь query-рядок через encodeURIComponent, символи & і =, що розділяють параметри, теж перетворяться на %26 і %3D — і сервер отримає один великий параметр замість кількох. Кодувати потрібно значення параметрів окремо, а не весь рядок цілком.

Коли це потрібно

  • Передача тексту з пробілами чи спецсимволами як частини query-параметра.
  • Формування посилань із динамічними значеннями (пошукові запити, ідентифікатори).
  • Діагностика: декодування адреси, щоб побачити, які дані реально в ній закодовані.

Edge case: подвійне кодування

Якщо рядок, що вже закодований у percent-encoding, закодувати ще раз, символ % сам перетвориться на %25 — і результат стане нечитабельним подвійно закодованим сміттям (%20%2520). Це трапляється, коли фреймворк автоматично кодує URL, а розробник додатково викликає encodeURIComponent вручну. Ознака проблеми — послідовності на кшталт %25XX у декодованому результаті.

Спробувати інструмент