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_*, которые вы обычно используете:
| Имя фильтра | Эквивалентная константа |
|---|---|
int | FILTER_VALIDATE_INT |
validate_email | FILTER_VALIDATE_EMAIL |
validate_url | FILTER_VALIDATE_URL |
string | FILTER_SANITIZE_STRING (устарело в PHP 8.1) |
full_special_chars | FILTER_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().