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

PHP-如何检查输入过滤器是否有效?,php,constants,sanitization,filter-input,Php,Constants,Sanitization,Filter Input,我有一个函数,它将filter\u input的filter常量作为可选参数。是否可以确保字符串的值是一个有效的PHP过滤器常量,可能是一个内置的PHP函数 我知道一种方法是制作我自己的所有过滤器常量数组并进行检查,但我希望有一种更简单或更好的方法。我能够通过使用get_defined_constants()PHP内置函数实现这一点,该函数列出了所有预定义的PHP常量 解决方案: 下面的代码将所有允许的过滤器存储到一个数组中,并允许您通过check_filter()函数检查任何过滤器的有效性 &

我有一个函数,它将
filter\u input
的filter常量作为可选参数。是否可以确保字符串的值是一个有效的PHP过滤器常量,可能是一个内置的PHP函数


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

我能够通过使用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

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

$valid = in_array($filter, filter_list(), true);
其中,
$filter
包含用户提供的筛选值,
$valid
结果作为bool(
true
如果有效,
false
如果无效)


更多详细信息请参见PHP手册中的内容。

,但您要查找的是某种白名单。请使用sse,在PHP手册中,白名单可能更精确,只需查找
过滤器
前缀也将允许使用标志,看,是的,我一开始是这样做的,但是有很多可用的过滤器,并且几乎每个新的PHP主要版本都添加了新的过滤器。不仅如此,过滤器和它们的标志、选项和其他参数之间也有关系。这不太符合地图1:1。无论如何,对于您给出的答案,您传递了常量的名称,但是我确实阅读了OP的问题,以对照常量值(不是名称)进行检查。同样,对于你给出的答案,也请参阅。谢谢。我认为这会很好
filter\u list()
很好地了解了这一点,但在我的谷歌搜索中没有出现。@track:不客气。除了谷歌搜索,我发现经常值得浏览和阅读PHP手册中的相关部分,例如扩展功能列表。这就是我发现这个的原因。还有一种方法是使用反射从PHP扩展中获取所有常量:-它适用于每个扩展,但是与
filter\u list()
相比,它并不适合您的情况。