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

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

Сериализация HTML строки из PHP в JS

Август 7, 2019 г.

Рассмотрим разновидность задачи по сериализации данных - мне нужно было сохранить HTML код в атрибуте контейнера, чтобы вставлять его по определенному событию в верстку. Можно было сразу вставить кусочки HTML кода в документ и далее манипулировать ...

Читать

Как в PHP записать данные в файл?

Ноябрь 12, 2015 г.

Рассмотрим несколько способов сохранения данных в файл. Функция file_put_contents() для записи в файл Функция появилась в 5й версии PHP. Это самый простой, наверное, способ записать скалярные данные (строку или текст) в файл. [crayon-6a9a3962ab837377629103/] ...

Читать

Грузим картинку в поле image в Drupal

Март 1, 2016 г.

Из кода программы на PHP мы попытаемся загрузить картинку в публикацию сайта на Drupal 7. Здесь описана логика и показан код всех операций. Постановка задачи Эта задача является частью задачи импорта статьи, извлеченной из HTML кода веб-страницы ...

Читать

Импортируем изображения через wysiwyg

Декабрь 27, 2014 г.

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

Читать
 

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

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



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