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

时间:2019-05-10 15:36:30

标签: php constants sanitization filter-input

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

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

2 个答案:

答案 0 :(得分:2)

您可以对照过滤器列表进行验证:

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

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

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

答案 1 :(得分:1)

我能够使用get_defined_constants()PHP内置函数来实现此目的,该函数列出了所有预定义的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

我希望这会有所帮助!