Увійти Реєстрація
Блог Серії
Кар'єра
Вакансії Компанії
Навчання
Документація Співбесіди Тестування Відео
Екосистема
Пакети Ресурси Проєкти Інструменти Події
Інше
Про нас

URL-кодування

Екранувати рядок для URL або розкодувати назад

Дані не залишають ваш браузер

Цей інструмент повністю працює на вашому пристрої: обчислення виконує JavaScript у вкладці. Ми не надсилаємо введений текст на сервер, не зберігаємо і не логуємо його. Можете сміливо працювати з робочими даними - і навіть відключити інтернет після завантаження сторінки.

Результат

Поділитись

Що таке URL-кодування

В адресі можна використовувати лише обмежений набір символів. Усе інше - пробіли, кирилиця, &, ?, # - треба екранувати: замінити на % і шістнадцятковий код байта. Це і є percent-encoding, або URL-кодування.

Без нього адреса просто ламається: пробіл обриває посилання, & починає новий параметр, а # відрізає все після себе.

Два різні кодування

Це найчастіша плутанина, і саме тому у формі вище є перемикач.

  • Компонент (encodeURIComponent) екранує усе, включно з /, ?, &, =. Використовуйте для значення одного параметра.
  • Повний URL (encodeURI) залишає структурні символи недоторканими, бо інакше адреса перестане бути адресою. Використовуйте, коли кодуєте посилання цілком.
// Значення параметра: & всередині має бути екранований
$value = rawurlencode('Тарас & Ко');   // %D0%A2%D0%B0%D1%80%D0%B0%D1%81%20%26%20%D0%9A%D0%BE

// Інакше цей & розірве query і створить зайвий параметр
$url = "https://example.com/search?q={$value}&page=2";

urlencode vs rawurlencode у PHP

У PHP є дві функції, і різниця між ними - один символ:

urlencode('привіт світ');      // ...+...  пробіл стає плюсом
rawurlencode('привіт світ');   // ...%20... пробіл стає %20

urlencode() реалізує старий формат HTML-форм (application/x-www-form-urlencoded), де пробіл - це +. rawurlencode() відповідає RFC 3986 - сучасному стандарту адрес.

Практичне правило: для частин шляху завжди rawurlencode(), бо + у шляху означає літеральний плюс, а не пробіл. Для query-параметрів підходять обидві, але rawurlencode() передбачуваніша.

У Laravel

// Хелпери самі кодують параметри - вручну нічого робити не треба
route('search', ['q' => 'привіт світ']);
url()->query('/jobs', ['city' => 'Київ', 'level' => 'middle']);

// Http-клієнт теж кодує query сам
Http::get('https://api.example.com/search', [
    'q' => 'Тарас & Ко',
]);

Подвійне кодування - типова помилка. Якщо передати в route() вже закодований рядок, %20 перетвориться на %2520. Кодуйте один раз, у найостаннішу чергу.

Кирилиця

Українські літери в UTF-8 займають два байти, тому одна літера дає дві percent-послідовності: і - це %D1%96. Та сама байтова природа стоїть за Base64. Довгі адреси українською виглядають страшно, але це нормально і коректно - браузери показують їх користувачу вже розкодованими.