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 |