W3docs

filter_list()

Функция PHP filter_list() возвращает список всех фильтров, поддерживаемых вашей сборкой PHP. Узнайте синтаксис, возвращаемые значения и примеры.

Введение

filter_list() — это функция PHP, которая возвращает имена всех фильтров, поддерживаемых вашей сборкой PHP. Расширение фильтров PHP является основой для функций валидации и санитизации, таких как filter_var() и filter_input(). Каждый фильтр — для адресов электронной почты, целых чисел, URL, IP-адресов и так далее — имеет краткое имя и числовой идентификатор, а filter_list() позволяет узнать, какие из них действительно доступны во время выполнения.

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

Синтаксис

filter_list(): array

Функция не принимает никаких аргументов и возвращает индексированный array строк — краткое имя каждого фильтра, поддерживаемого вашей установкой PHP. Порядок не гарантирован и может различаться между версиями PHP, поэтому никогда не полагайтесь на конкретную позицию.

Возвращаемое значение

Элементы array — это имена фильтров (например, "validate_email" или "int"), а ключи array — просто последовательные целые числа (0, 1, 2…). Ключи — это не идентификаторы фильтров, что является распространённым заблуждением. Чтобы получить реальный числовой идентификатор фильтра, передайте его имя в filter_id():

<?php

$filters = filter_list();
echo $filters[0] . "\n";            // e.g. "int"
echo filter_id($filters[0]) . "\n"; // e.g. 257  (FILTER_VALIDATE_INT)

Эти краткие имена являются аналогами констант FILTER_*, которые вы обычно используете:

Имя фильтраЭквивалентная константа
intFILTER_VALIDATE_INT
validate_emailFILTER_VALIDATE_EMAIL
validate_urlFILTER_VALIDATE_URL
stringFILTER_SANITIZE_STRING (устарело в PHP 8.1)
full_special_charsFILTER_SANITIZE_FULL_SPECIAL_CHARS

Перечисление всех доступных фильтров

Наиболее распространённый вариант использования — перечислить все фильтры, зачастую вместе с их числовыми идентификаторами для быстрого справочника:

<?php

foreach (filter_list() as $name) {
    echo $name . " => " . filter_id($name) . "\n";
}

Вывод (конкретный набор зависит от версии PHP):

int => 257
boolean => 258
float => 259
validate_regexp => 272
validate_domain => 277
validate_url => 273
validate_email => 274
validate_ip => 275
validate_mac => 276
string => 513
stripped => 513
encoded => 514
special_chars => 515
full_special_chars => 522
unsafe_raw => 516
email => 517
url => 518
number_int => 519
number_float => 520
add_slashes => 523
callback => 1024

Обратите внимание, что string и stripped имеют одинаковый идентификатор 513 — это два имени одного и того же фильтра.

Когда стоит её использовать?

В повседневном коде валидации вы редко вызываете filter_list() — для этого используется filter_var() с константой FILTER_*. filter_list() незаменима для:

  • Диагностики и инструментальных средств. Вывода поддерживаемых фильтров на отладочной странице или в дампе информации о среде.
  • Обнаружения функциональности. Проверки наличия фильтра перед его использованием, особенно для фильтров, зависящих от сборки или версии.
  • Создания динамических интерфейсов. Заполнения выпадающего списка, позволяющего администратору выбрать применяемый фильтр.

Проверка наличия конкретного фильтра

Поскольку значения являются обычными строками, проверить наличие фильтра можно с помощью in_array():

<?php

if (in_array("validate_email", filter_list(), true)) {
    echo "Email validation is available.\n";
} else {
    echo "Email filter is missing.\n";
}

Вывод:

Email validation is available.

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

  • Ключи — это индексы, а не идентификаторы. Используйте filter_id() для преобразования имени в идентификатор, принимаемый функцией filter_var().
  • Имена и константы — разные вещи. filter_list() возвращает краткие имена ("int"), а не имена констант (FILTER_VALIDATE_INT). Не сравнивайте их напрямую.
  • Порядок непостоянен. Всегда выполняйте поиск по имени, а не по позиции.

Связанные функции

  • filter_id() — получить числовой идентификатор по имени фильтра.
  • filter_var() — применить фильтр к одному значению.
  • filter_input() — фильтрация значения из внешнего источника (GET, POST и др.).
  • filter_var_array() — фильтрация нескольких значений одновременно.

Заключение

filter_list() возвращает имена всех фильтров, поддерживаемых вашей сборкой PHP. Это преимущественно инструмент обнаружения и диагностики: используйте её в паре с filter_id() для просмотра идентификаторов, применяйте in_array() для проверки доступности, а когда вам действительно нужно выполнить валидацию или санитизацию данных — обращайтесь к filter_var().

Практика

Практика
Какие из следующих вариантов являются допустимыми именами фильтров, возвращаемыми filter_list() в PHP?
Какие из следующих вариантов являются допустимыми именами фильтров, возвращаемыми filter_list() в PHP?
Was this page helpful?