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

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

Генератор "удобных" паролей

Декабрь 19, 2012 г.

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

Читать

Работаем с датами широкого диапазона в PHP

Январь 28, 2016 г.

Многие не задумываются при работе в PHP со стандартными функциями даты-времени о диапазоне их применимости (date(), time(), mktime() и т.п). Так мы можем скоро столкнуться с проблемой, подобная которой случалась уже раньше - "ошибка 2000". Я прекрасно ...

Читать

Проверка кодов ОГРН / ОГРНИП на PHP

Сентябрь 24, 2015 г.

Продолжая тему валидаторов, публикую код двух функций для проверки введенных пользователем кодов ОГРН или ОГРНИП. Проверка кода ОГРН. Код содержит 13 знаков, последний из них используется для проверки "контрольной суммы". [crayon-6889edac0502d123943443/] ...

Читать

Получение превью (картинки) для видео vimeo

Август 23, 2019 г.

Рассмотрим как получить thumbnail для видео vimeo, если у вас есть только url видоса. Vimeo позволяет извлечь мета информацию о видео, используя video id. Потому мы сначала выделим id, а потом выполним запрос к API Vimeo за дополнительной информацией, ...

Читать
 

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

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



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