PHP - 如何检查输入过滤器是否有效?

PHP - How to check if an input filter is valid?

我有一个函数将 filter_input 的过滤器常量作为可选参数。是否可以确保字符串的值是一个有效的 PHP 过滤器常量,也许有一个内置的 PHP 函数?

我知道一种方法是创建我自己的所有过滤器常量数组并进行检查,但我希望有一种更简单或更好的方法。

我能够通过使用 get_defined_constants() PHP built-in 函数来实现这一点,该函数列出了所有预定义的 PHP 常量。

解法:

下面的代码会将所有允许的过滤器存储到一个数组中,并允许您通过 check_filter() 函数检查任何过滤器的有效性。

<?php

$constants = get_defined_constants();
$allowed_filters = array();
foreach ($constants as $c => $val)
    if (substr($c, 0, 7) == 'FILTER_')
        $allowed_filters[$c] = 1;

function check_filter($filter_name, $allowed_filters) { return isset($allowed_filters[$filter_name]); }

var_dump(check_filter('FILTER_SANITIZE_EMAIL', $allowed_filters)); // true
var_dump(check_filter('FILTER_TEST', $allowed_filters)); // false
var_dump(check_filter('PHP_VERSION', $allowed_filters)); // false, even though constant exists

希望对您有所帮助!

您可以根据过滤器列表进行验证:

$valid = in_array($filter, filter_list(), true);

其中 $filter 包含用户提供的过滤器值和 $valid 作为布尔值的结果(true 如果有效,false 如果无效)。

有关详细信息,请参阅 PHP 手册中的 filter_list()