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, смещение от GMT, UTC

Январь 14, 2016 г.

Для начала разберемся что такое GMT и UTC.  Во многих источниках они упоминаются как синонимы, и между ними действительно не существенная разница (до 1 секунды). Их отличие в методике получения точного значения. UTC (универсальное координированное ...

Читать

Как в PHP сделать буквы заглавными?

Сентябрь 13, 2016 г.

PHP обладает целым арсеналом работы со строками. Сделать буквы заглавными или наоборот перевести в строчные - нет ничего проще. Базовый набор функций для работы со строками содержит такие функции как: string strtolower ( string $string ); - ...

Читать

Загрузка-выгрузка в формате excel из PHP

Август 25, 2017 г.

Встроенные библиотеки PHP не позволяют работать с форматами данных популярного табличного процессора Excel. За исключением текстового формата CSV (см. ...

Читать

Имя файла по handle в PHP

Июнь 15, 2016 г.

Всем привычна схема, при которой известно имя файла, и вы совершаете с ним какие то манипуляции. В PHP много функций, которые предоставляют именно такой функционал. Что делать, когда есть только file handle? Как получить имя открытого файла? ...

Читать
 

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

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



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