Отличия rawurlencode() и urlencode()

Функция rawurlencode() экранирует символы согласно современному стандарту RFC 3986.

$link = 'https://know-online.com/search?q='.rawurlencode('PHP 8.4');
// https://know-online.com/search?q=PHP%208.4

$link = 'https://know-online.com/search?q='.urlencode('PHP 8.4');
// https://know-online.com/search?q=PHP+8.4

На примере выше видно, что функция rawurlencode() заменила пробел на «%20», а функция urlencode() заменила на «+».

Рекомендуется использовать rawurlencode(), чтобы не конфликтовать с другими языками программирования, которые будут обрабатывать закодированную строку (например в JavaScript).