文字

Filter 函数

Table of Contents

  • filter_has_var — Checks if variable of specified type exists
  • filter_id — 返回与某个特定名称的过滤器相关联的id
  • filter_input_array — 获取一系列外部变量,并且可以通过过滤器处理它们
  • filter_input — 通过名称获取特定的外部变量,并且可以通过过滤器处理它
  • filter_list — 返回所支持的过滤器列表
  • filter_var_array — 获取多个变量并且过滤它们
  • filter_var — 使用特定的过滤器过滤一个变量

用户评论:

[#1] fumble1 at web dot de [2007-08-12 10:54:36]

I recommend you to use the FILTER_REQUIRE_SCALAR (or FILTER_REQUIRE_ARRAY) flags, since you can use array-brackets both to access string offsets and array-element -- however, not only this can lead to unexpected behaviour. Look at this example:

<?php
$image 
basename(filter_input(INPUT_GET'src'FILTER_UNSAFE_RAWFILTER_FLAG_STRIP_LOW));
// further checks
?>


/script.php?src[0]=foobar will cause a warning. :-(
Hence my recommendation:

<?php
$image 
basename(filter_input(INPUT_GET'src'FILTER_UNSAFE_RAWFILTER_REQUIRE_SCALAR FILTER_FLAG_STRIP_LOW));
// further checks
?>

[#2] Richard Davey rich at corephp dot co dot uk [2007-06-13 11:15:15]

There is an undocumented filter flag for FILTER_VALIDATE_BOOLEAN. The documentation implies that it will return NULL if the value doesn't match the allowed true/false values. However this doesn't happen unless you give it the FILTER_NULL_ON_FAILURE flag like this:

<?php
$value 
'car';
$result filter_var($valueFILTER_VALIDATE_BOOLEANFILTER_NULL_ON_FAILURE);
?>


In the above $result will equal NULL. Without the extra flag it would equal FALSE, which isn't usually a desired result for this specific filter.

[#3] ckroll at rightmedia dot com [2007-05-08 08:02:22]

Beware, the FILTER_SANITIZE_STRING flag functions much like strip_tags, so < will get filtered from input regardless of it's actually part of a tag.  We were getting unexepected results with a graphic library we wrote when trying to print < on a dynamic button.  The url came in something like ?string=%3C (<) but after filter ran it was empty.  To get around this, you could use FILTER_UNSAFE_RAW on that one param.

[#4] user [2007-02-02 12:15:38]

Below is some code using filter API to restrict access to LAN by IPv4 private address range.

These notes may save someone else a little time:

filter_input_array() is useless for running multiple filters on the same key.
No way to chain or negate filters.

<?php


function FILTER_NEGATE_HACK($_){ return (bool)!$_; }

function 
client_is_private_ipv4(){
  return (
filter_input(INPUT_SERVER'REMOTE_ADDR'FILTER_VALIDATE_IPFILTER_FLAG_IPV4) && 
            
FILTER_NEGATE_HACK(filter_input(INPUT_SERVER'REMOTE_ADDR'FILTER_VALIDATE_IPFILTER_FLAG_NO_PRIV_RANGE));
}

if (! 
client_is_private_ipv4()) 
  exit(
'This application is restricted to local network users');

?>

[#5] vojtech at x dot cz [2006-12-21 06:38:04]

Also notice that filter functions are using only the original variable values passed to the script even if you change the value in super global variable ($_GET, $_POST, ...) later in the script.

<?php
echo filter_input(INPUT_GET'var'); // print 'something'
echo $_GET['var']; // print 'something'
$_GET['var'] = 'changed';
echo 
filter_input(INPUT_GET'var'); // print 'something'
echo $_GET['var']; // print 'changed'
?>


In fact, external data are duplicated in SAPI before the script is processed and filter functions don't use super globals anymore (as explained in Filter tutorial bellow, section 'How does it work?').

[#6] vojtech at x dot cz [2006-12-21 05:13:54]

Just to note that "server and env support may not work in all sapi, for filter 0.11.0 or php 5.2.0" as mentioned in Filter tutorial bellow.

The workaround is obvious:
Instead of 
<?php
$var 
filter_input(INPUT_SERVER'SERVER_NAME'FILTER_DEFAULT);
?>

use
<?php
$var 
filter_var(isset($_SERVER['SERVER_NAME']) ? $_SERVER['SERVER_NAME'] : NULLFILTER_DEFAULT);
?>

上一篇: 下一篇: