我有一个函数,该函数将filter_input
的过滤器常量作为可选参数。可以使用内置的PHP函数来确保字符串的值是有效的PHP过滤器常量吗?
我知道一种方法是创建自己的所有过滤器常量数组并进行检查,但是我希望找到一种更简单或更佳的方法。
答案 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
我希望这会有所帮助!