W3docs

filter_var()

PHP предоставляет встроенные функции для фильтрации и валидации данных. Одна из них — filter_var() для очистки значений.

Введение

filter_var() — встроенный инструмент PHP для валидации и санирования одного значения. Валидация означает проверку того, соответствует ли значение ожидаемому формату (корректный email, целое число в диапазоне, допустимый URL), и возвращает значение при успехе или false при несоответствии. Санирование означает очистку значения путём удаления или экранирования недопустимых символов.

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

Синтаксис

filter_var(mixed $value, int $filter = FILTER_DEFAULT, array|int $options = 0): mixed
ПараметрОбязательныйОписание
$valueдаЗначение для фильтрации.
$filterнетИдентификатор фильтра, например FILTER_VALIDATE_INT. По умолчанию используется FILTER_DEFAULT, который не выполняет никакой фильтрации.
$optionsнетАссоциативный array параметров/флагов или одна константа флага для тонкой настройки фильтра.

Возвращаемое значение: отфильтрованное (и возможно преобразованное) значение при успехе, или false при ошибке. Обратите внимание, что фильтр валидации возвращает само значение — поэтому всегда используйте === при сравнении, если допустимое значение может быть ложным (например 0 или пустая строка).

Валидация данных

Валидация отвечает на вопрос «да/нет»: приемлемо ли это значение? Фильтр возвращает значение при успехе и false при ошибке.

Валидация email-адреса

php— editable, runs on the server

Наиболее полезные фильтры валидации:

ФильтрПроверяет
FILTER_VALIDATE_INTЦелое число (опционально в диапазоне min_range/max_range).
FILTER_VALIDATE_FLOATЧисло с плавающей точкой.
FILTER_VALIDATE_BOOLEAN"1", "true", "on", "yes"true; "0", "false", "off", "no", ""false.
FILTER_VALIDATE_EMAILEmail-адрес.
FILTER_VALIDATE_URLURL-адрес.
FILTER_VALIDATE_IPАдрес IPv4/IPv6.
FILTER_VALIDATE_REGEXPЗначение, соответствующее шаблону PCRE.

Ловушка === false

Поскольку фильтр валидации возвращает значение, результат 0 или "0" является допустимым, но ложным. Всегда используйте строгое сравнение:

php— editable, runs on the server

Санирование данных

Санирование не отклоняет значение — оно очищает его и возвращает очищенную строку.

Санирование email-адреса

php— editable, runs on the server

Распространённые фильтры санирования:

ФильтрДействие
FILTER_SANITIZE_EMAILУдаляет символы, недопустимые в email.
FILTER_SANITIZE_URLУдаляет символы, недопустимые в URL.
FILTER_SANITIZE_NUMBER_INTОставляет цифры и +/-.
FILTER_SANITIZE_NUMBER_FLOATОставляет цифры, +/-, и (с флагами) .,e.
FILTER_SANITIZE_SPECIAL_CHARSHTML-кодирует <, >, &, " и другие символы.
FILTER_SANITIZE_FULL_SPECIAL_CHARSАналог htmlspecialchars() с ENT_QUOTES.

Примечание: FILTER_SANITIZE_STRING был объявлен устаревшим в PHP 8.1. Для очистки строк при выводе в HTML предпочтительнее использовать htmlspecialchars() непосредственно в точке вывода.

Использование параметров и флагов

Третий аргумент позволяет тонко настроить фильтр. Передавайте его в виде array с ключом 'options' (и опционально 'flags'):

php— editable, runs on the server

Флаги также можно передавать непосредственно в качестве третьего аргумента, когда форма array не нужна:

php— editable, runs on the server

Валидация и санирование — когда что использовать

  • Валидацию — когда нужно принять решение «да/нет»: отклонить запрос, показать ошибку, повторить попытку. Используйте фильтры валидации для email, чисел, URL и IP-адресов в формах и API.
  • Санирование — когда необходимо принять входные данные, но нужно очистить их от опасных или лишних символов перед использованием.
  • Оба подхода дополняют друг друга — распространённый паттерн: валидировать на входе и экранировать (например, с помощью htmlspecialchars()) на выходе, не полагаясь только на фильтры санирования.

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

  • Фильтр валидации возвращает значение, а не true. Сравнивайте с === false для обнаружения ошибки.
  • filter_var() работает с одним скалярным значением. Для фильтрации нескольких значений одновременно используйте filter_var_array() или, для данных запросов, filter_input_array().
  • FILTER_VALIDATE_BOOLEAN возвращает null (а не false) для нераспознанных значений только при передаче FILTER_NULL_ON_FAILURE; в остальных случаях возвращается false.
  • Не полагайтесь на фильтры санирования для критически важного с точки зрения безопасности экранирования вывода — экранируйте в момент рендеринга.

Связанные темы

Заключение

filter_var() — компактный и надёжный способ валидации и санирования отдельных значений в PHP. Используйте фильтры валидации для принятия или отклонения входных данных, фильтры санирования для их очистки, и не забывайте сравнивать результаты валидации с === false. В сочетании с filter_var_array() для пакетных данных и htmlspecialchars() для вывода это составляет основу безопасной обработки входных данных.

Практика

Практика
Каково назначение функции filter_var() в PHP?
Каково назначение функции filter_var() в PHP?
Was this page helpful?