PHP5过滤器功能第2部分
在上一篇有关PHP过滤器函数的文章之后,还有另外两个过滤器函数需要一些额外的说明。这些函数是filter_var_array()和filter_input_array()。
它们的工作方式与filter_var()和几乎相同,filter_input()但是它们接受数组作为输入。这使您可以同时清除或验证许多不同的变量。
使用这些函数的第一步是创建一个参数数组。这是数据标识符的关联数组,可让您为不同的值设置过滤器和消毒剂标志。例如,假设将使用以下数组。
$data = array( 'rowid' => '10', 'level' => '23', 'text' => 'some text', 'dataAray' => array('2', '23', '10', '12'), );
为了确保rowid始终是整数,像这样在参数数组中使用了过滤器标志FILTER_VALIDATE_INT。
$args=array('rowid'=>FILTER_VALIDATE_INT);
需要对数组中的级别值执行相同的操作。但是,我还需要确保该值在一定范围内。这是通过使用内部数组完成的,该数组包含参数filter(用于验证整数)和options(用于定义最小和最大范围)。
$args = array( 'rowid' => FILTER_VALIDATE_INT, 'level' => array( 'filter' => FILTER_VALIDATE_INT, 'options' => array( 'min_range' => 1, 'max_range' => 30 ) ) );
该函数数组不会返回此参数数组中未包含的任何内容。因此,目前函数将完全错过数组的text和dataArray部分。由于文本变量中包含一些HTML,因此我想使用FILTER_SANITIZE_SPECIAL_CHARS将其转换为字符编码的文本。dataArray必须是所有整数,我想强制将其设置为数组,即使不是。即使变量是数组,FILTER_VALIDATE_INT过滤器也会
$args = array( 'rowid' => FILTER_VALIDATE_INT, 'level' => array( 'filter' => FILTER_VALIDATE_INT, 'options' => array( 'min_range' => 1, 'max_range' => 30 ) ), 'text' => FILTER_SANITIZE_ENCODED, 'dataAray' => array( 'filter' => FILTER_VALIDATE_INT, 'flags' => FILTER_FORCE_ARRAY, ) );
放置好数组后,我们现在就可以将其放入filter_var_array()和过滤/清理数据了。
$myinputs = filter_var_array($data, $args); var_dump($myinputs);
这将产生以下结果。
array(4) { ["rowid"]=> int(10) ["text"]=> string(42) "some text" ["level"]=> int(23) ["dataAray"]=> array(4) { [0]=> int(2) [1]=> int(23) [2]=> int(10) [3]=> int(12) } }
在filter_input_array()函数中使用此命令是相同的,但是在这种情况下,不是使用数据作为第一个参数,而是使用INPUT_GET,INPUT_POST,INPUT_COOKIE,INPUT_SERVER,INPUT_ENV,INPUT_SESSION或INPUT_REQUEST中的一个。以下示例使用INPUT_POST从发布请求中检索数据。
$myinputs = filter_input_array(INPUT_POST, $args); var_dump($myinputs);
回调过滤器可用于将数据从一种形式更改为另一种形式,基本上可以创建您自己的消毒剂。假设我们有一个HTML字符串,但是我们只想将三个字符从其非编码形式更改为编码形式。这些字符是和“,分别转换为<,>和”。
为了通过过滤器运行回调函数,我们使用FILTER_CALLBACK标志和一个options数组,该数组指向我们要运行的函数。
function replaceTags($html){ return str_replace(array('<', '>', '"'),array('<', '>', '"'),$html); } $html = 'Some text'; echo filter_var($html,FILTER_CALLBACK,array('options'=>'replaceTags'));
当filter_var()函数在这段代码中运行时,它将HTML中的三个字符替换为它们的编码等效项。
尽管php.net网站上提供了很多信息,但是在页面上有一个很棒的页面,phpro.org其中包含与该过滤功能一起使用的每个过滤器和消毒剂的示例。