URL encode і decode (urlencode, rawurlencode)
Кодує рядок для URL і розкодовує назад. Дві функції PHP відрізняються одним символом, і це важливо.
Пояснює, чому пробіл став плюсом, а плюс зник
Параметр з кирилицею, пробілом чи амперсандом не можна вставити в URL як є. Інструмент кодує рядок обраним способом і розкодовує закодовані рядки з логів чи вебхуків, показуючи різницю між %20 і + наочно.
rawurlencode кодує все, крім літер, цифр і -_.~, у вигляді %XX за RFC 3986. urlencode робить те саме, але пробіл перетворює на +. Зворотні функції rawurldecode і urldecode симетричні: друга перетворює + на пробіл. Для збирання query string є http_build_query, яка кодує значення і склеює пари.
echo rawurlencode('Senior PHP+Laravel, Київ');
// Senior%20PHP%2BLaravel%2C%20%D0%9A%D0%B8%D1%97%D0%B2
echo urlencode('Senior PHP+Laravel, Київ');
// Senior+PHP%2BLaravel%2C+%D0%9A%D0%B8%D1%97%D0%B2
echo http_build_query(['q' => 'php laravel', 'city' => 'Київ']);
// q=php+laravel&city=%D0%9A%D0%B8%D1%97%D0%B2
Що питають про цей інструмент
rawurlencode дотримується RFC 3986 і кодує пробіл як %20; це правильний вибір для шляху й будь-якої частини URL. urlencode кодує пробіл як + за старим стандартом форм і годиться лише для query string у форматі application/x-www-form-urlencoded. Якщо сумніваєтесь, беріть rawurlencode.
Ні, лише значення: параметри в query string, сегменти шляху. Якщо закодувати весь URL, слеші й двокрапка стануть %2F і %3A, і адреса перестане бути адресою. Для query string найпростіше http_build_query, вона кодує кожне значення сама.
Бо у query string плюс означає пробіл, і сервер розкодував його саме так. Плюс у значенні (наприклад, у номері телефону) має бути закодований як %2B. Це найчастіша причина зламаних телефонів у формах.