urlencode vs rawurlencode: разница и примеры в PHP

Если вам нужно передать данные в URL в PHP, вы наверняка сталкивались с функцией urlencode(). А может быть, слышали и о rawurlencode(). И ещё третья функция — http_build_query() — всплывает в ответах на форумах и в рекомендациях официальной документации.

Так когда использовать каждую из них? И в чём вообще разница между ними? Разберёмся на практике, без теории ради теории.

Что делают urlencode() и rawurlencode()

Обе функции кодируют строку, превращая «опасные» символы (пробелы, амперсанды, знаки вопроса и др.) в безопасную форму для вставки в URL. Но делают это немного по-разному.

urlencode()

  • Преобразует пробел в знак +
  • Остальные специальные символы — в последовательности вида %XX

Пример:

rawurlencode()

  • Преобразует все специальные символы в %XX
  • Пробел — в %20 (а не +!)

Пример:

Где использовать: путь или параметры?

Чтобы выбрать нужную функцию, важно понимать, где именно вы вставляете строку: в путь URL или в параметры запроса (query string).

Путь URL → rawurlencode()

Если строка идёт в путь — например, имя файла или slug — используйте rawurlencode(). Это позволит сохранить корректную структуру URL.

Параметры запроса → urlencode() (или лучше http_build_query())

Если вы передаёте параметры после ?, например ?name=John Doe&age=30, можно использовать urlencode() — но ещё лучше довериться http_build_query().

Почему http_build_query() лучше для параметров

Функция http_build_query() специально создана для генерации строки параметров из массива. Она:

  • Правильно кодирует ключи и значения
  • Автоматически расставляет & между параметрами
  • Использует urlencode() внутри

Это предпочтительный способ передавать параметры, потому что он надёжный и безопасный.

Типичные ошибки

Неправильно: использовать urlencode() для путей

Правильно:

Собираем параметры вручную:


Чтобы избежать проблем с URL в PHP:

  • Используйте rawurlencode() для пути (например, файлов или slug’ов)
  • Используйте http_build_query() для параметров запроса
  • urlencode() — устаревший, но ещё применимый способ кодирования отдельных значений в параметрах

Такой подход сделает ваши URL безопасными, совместимыми и легко читаемыми как браузером, так и сервером.

Мало букафф? Читайте есчо !

Переводим строку в число с плавающей запятой в PHP

Май 7, 2018 г.

Скаляры для PHP все на одно лицо. Строки или числа, с плавающей запятой или без. PHP не заморачивается. Ему не нужны строгие рамки типов скаляра. Платить за эту вольность приходится довольно скоро. Начнем с того, что PHP знает два оператора сложения, ...

Читать

Удаление элементов из массива в PHP

Ноябрь 11, 2015 г.

Массивы в PHP - один из мощнейших инструментов программиста. Когда я начинал изучать PHP, у меня был определенный багаж знаний работы с массивами в других языках программирования, таких как C++, Delphi и Fortrain. Везде требовалось объявить массив, указать ...

Читать

DOMDocument кодировка при сохранении в HTML

Декабрь 20, 2016 г.

PHP поддерживает работу с классом DOMDocument, но есть некоторые особенности, которые требуют внимания. Одна из них - это html кодирование символов, если вы не укажете в заголовке документа мета информацию о кодировке. Рассмотрим пример: [crayon-69f816f7d2b66089996296/] ...

Читать

Измеряем скорость работы кода в PHP

Сентябрь 15, 2017 г.

Чтобы измерить скорость работы кода нужны две вещи - "код" и секундомер. Программный код у вас есть, а секундомер, оформленный в виде класса - можете взять здесь. Очень простой, основанный на функции microtime(), секундомер скрывает рутину по сохранению ...

Читать
 

Комментарии к «urlencode vs rawurlencode: разница и примеры в PHP»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: