PHP的开发过程中,少不了对来自客户端的各种“输入”进行验证和处理。比如,表单提交,Cookie检查,等。
传统的做法是使用各种标准函数进行处理,比如
if(isset($_POST['vname'])){
$vname = htmlspecialchars($_POST['vname']);
}
PHP 5.2.0 以后提供了被称为 filter 的概念专门用于处理类似的操作。
还是上面的操作,使用 filter 的做法如下:
if(filter_has_var(INPUT_POST, 'vname')){
$vname = filter_input(INPUT_POST, 'vname', FILTER_SANITIZE_SPECIAL_CHARS);
}
对一个变量的处理,看起来,并没有简单多少,但却提供了统一的“格式”。
如果是多个变量需要同时处理,传统的方式怕就只能是写多个if语句。利用filter却可以通过一个函数调用(filter_input_array)加配置的方式实现。比如下面来自PHP参考文档的例子:
$args = array(
'product_id' => FILTER_SANITIZE_ENCODED,
'component' => array('filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_ARRAY,
'options' => array('min_range' => 1, 'max_range' => 10)
),
'versions' => FILTER_SANITIZE_ENCODED,
'doesnotexist' => FILTER_VALIDATE_INT,
'testscalar' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_SCALAR,
),
'testarray' => array(
'filter' => FILTER_VALIDATE_INT,
'flags' => FILTER_REQUIRE_ARRAY,
)
);
$myinputs = filter_input_array(INPUT_POST, $args);
看起来简单不少吧。重要的是,filter使得我们有可能对用户输入的验证和处理进行模块化处理。
预定义常量:
| 常量 | 备注 |
|---|---|
| INPUT_POST | |
| INPUT_GET | |
| INPUT_COOKIE | |
| INPUT_ENV | |
| INPUT_SERVER | |
| INPUT_SESSION | |
| INPUT_REQUEST |