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 безопасными, совместимыми и легко читаемыми как браузером, так и сервером.

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

Считаем полное число строк в запросе MySQL, ограниченного LIMIT

Ноябрь 2, 2012 г.

О полезном операторе - SQL_CALC_FOUND_ROWS. Это конструкция просто незаменима для организации постраничного вывода каких либо данных. Все время забываю синтаксис, приходится каждый раз искать. Решил записать в блоге, чтобы уж не терять :). Во всех ...

Читать

Выделение короткой строки-аннотации из HTML статьи

Март 10, 2013 г.

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

Читать

Вызов замыкания из другой анонимной функции.

Декабрь 14, 2020 г.

При необходимости использовать (в PHP коде) замыкание (closure) A в коде замыкания B, возникает проблема в области видимости. Т.к. внутри B о функции A ничего не известно. Пример ситуации: [crayon-6989fcd57a88c192504727/] Для того чтобы в ...

Читать

Переводим массив в XML на PHP

Июнь 18, 2018 г.

Итак, как перевести ассоциативный массив в XML? Воспользуемся "родным" для PHP классом SimpleXMLElement. В качестве основного контейнера используем тег <values/>, а  установить UTF-8 кодировку нам поможет небольшая хитрость. Инициализация ...

Читать
 

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

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



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