php-filter过滤器- filter_input_array() 和如何正确运用PHP filter判断过滤数据。

jackxiang 2010-11-9 19:14 | |
    在PHP出现至今,一直在不断的更新版本,增加新的功能,供我们大家使用,满足我们的需求。PHP 5.2以及更高的版本,PHP filter被绑定于系统,它可以对数据进行自动的过滤和判断。
第一种、PHP filter判断一个变量的内容是否符合要求
使用函数filter_var,第一个参数是要判断的变量。第二个参数是判断的要求,FILTER_VALIDATE_EMAIL表示判断是否符合email格式。如果变量是类似’boy@163.com’的数据,系统就会完整的输出‘boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出空字符串。
$email = ‘boy@163.com’;  
echo filter_var($email,
FILTER_VALIDATE_EMAIL);  

第二种、PHP filter根据要求过滤一个变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。如果变量是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果变量没有设置内容,系统输出空字符串。如果是’boy阿三’,系统会把email格式中不允许的东西去除,输出’boy’。
$email = ‘boy@163.com’;  
echo filter_var($email,
FILTER_SANITIZE_EMAIL);  

第三种、PHP filter判断输入的变量的内容是否符合要求
使用函数filter_input。第一个参数表示从那里获得的数据,INPUT_POST表示通过POST方法传递过来,还可以使用INPUT_GET, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV,代表相应的途径。第二个参数就是数据的名称。第三个参数代表过滤的要求,FILTER_VALIDATE_EMAIL表示判断数据是否符合email格式。
假设通过表单的POST过来的一个字段email。如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出null,也就是空。
echo filter_input(INPUT_POST,
‘email’, FILTER_VALIDATE_EMAIL);

第四种、PHP filter根据要求过滤输入的变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。假设通过表单的POST过来的一个字段email。
如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果没有填写表单中的email字段,系统输出null,也就是空。如果是’boy阿三’源码天空,系统会把email格式中不允许的东西去除,输出’boy’。
echo filter_input
(INPUT_POST, ‘email’,
FILTER_SANITIZE_EMAIL);  
以上就是PHP filter的具体功能介绍,希望对又需要的朋友有所帮助。

来自:http://www.codesky.net/article/200912/140526.html

  php5.20之后增加了一个filter过滤器的扩展,主要用于验证和过滤数据,通常用于用户提交的表单数据,COOKIE等。这对提高程序的安全性和远离SQL注入带来了极大的好处。LFilter类在调用filter API的基础上,封装一个较为完整的类。拿来和大家分享,欢迎指正。注意:filter对于$_FILES 上传文件的类型数据,无法过滤。下面是一个使用Filter自己封装的类。
在本例中,我们使用 filter_input_array() 函数来过滤三个 POST 变量。所接受的 POST 变量是姓名、年龄以及电子邮件地址:

输出类似:
Array
(
[name] => Peter
[age] => 41
[email] => peter@example.com
)

来源:http://www.cardii.net/php-filter


<?php  

class LFilter  

{  

     private static $_options = array(  

         'int'   => FILTER_VALIDATE_INT,//validate value as integer  

         'bool'  => FILTER_VALIDATE_BOOLEAN,//retrun true for "1","true","on","yes"  

         'float' => FILTER_VALIDATE_FLOAT,//validate value as float  

         'regexp'=> FILTER_VALIDATE_REGEXP,  

         'url'   => FILTER_VALIDATE_URL,//validate value as url  

         'email' => FILTER_VALIDATE_EMAIL,//validate value as e-mail  

         'ip'    => FILTER_VALIDATE_IP,//validate value as IP address  

    

         'string'  => FILTER_SANITIZE_STRING,  

         'stripped'=> FILTER_SANITIZE_STRIPPED,  

         'encoded' => FILTER_SANITIZE_ENCODED,//URL-encode string,optionally strip or encode special characters  

         'chars'    => FILTER_SANITIZE_SPECIAL_CHARS,  

         'semail'   => FILTER_SANITIZE_EMAIL,//remove all characters except letters,digits and !#$%&'*+-/=?^_`{|}~@.[]  

         'url'     => FILTER_SANITIZE_URL,  

         'sint'     => FILTER_SANITIZE_NUMBER_INT,  

         'sfloat'   => FILTER_SANITIZE_NUMBER_FLOAT,//Remove all characters except digits,+- and optionally .eE  

         'quotes'  => FILTER_SANITIZE_MAGIC_QUOTES,//Apply addslashes()  

    

         'octal'   => FILTER_FLAG_ALLOW_OCTAL,  

         'hex'     => FILTER_FLAG_ALLOW_HEX,  

         'slow'    => FILTER_FLAG_STRIP_LOW,  

         'shigh'   => FILTER_FLAG_STRIP_HIGH,  

         'elow'    => FILTER_FLAG_ENCODE_LOW,  

         'ehigh'   => FILTER_FLAG_ENCODE_HIGH,  

         'eamp'    => FILTER_FLAG_ENCODE_AMP,  

         'noquotes'=> FILTER_FLAG_NO_ENCODE_QUOTES,  

         'null'    => FILTER_FLAG_EMPTY_STRING_NULL,  

         'fraction'=> FILTER_FLAG_ALLOW_FRACTION,  

         'thousand'=> FILTER_FLAG_ALLOW_THOUSAND,  

         'scientific'=> FILTER_FLAG_ALLOW_SCIENTIFIC,  

         'srequired' => FILTER_FLAG_SCHEME_REQUIRED,  

         'ipv4'    => FILTER_FLAG_IPV4,  

         'ipv6'    => FILTER_FLAG_IPV6,  

         'callback' => FILTER_CALLBACK,  

         'array'   => FILTER_REQUIRE_ARRAY  

     );  

    

     private static $_data=array();  

     private static $_flag=array();  

    

     public static function getOption($key)  

     {  

         if(array_key_exists($key,self::$_options))  

             return self::$_options[$key];  

         return NULL;  

     }  

    

     /**  

      * getInt 验证$_GET变量是否是整数  

      * e.g.  

      * <code>  

      * LFilter::getInt('id');  

      * </code>  

      *  

      * @param string $field  

      * @param int $min  

      * @param int $max  

      * @access public  

      * @return bool  

      */

     public static function getInt($int,$min=null,$max=null)  

     {  

         if($min||$max) self::$_data=array('min_range'=>$min,'max_range'=>$max);  

         return filter_input(INPUT_GET,$int,self::getOption('int'),self::$_data);  

     }  

    

     /**  

      * checkInt 检查$int变量是否是整数  

      * e.g.  

      * <code>  

      *  LFilter::checkInt($_GET['id']);  

      *  LFilter::checkInt($_GET['id'],20,2000);  

      * </code>  

      *  

      * @param var $int  

      * @param int $min  

      * @param int $max  

      * @static  

      * @access public  

      * @return bool  

      */

     public static function checkInt($int,$min=null,$max=null)  

     {  

         if($min||$max) self::$_data=array('min_range'=>$min,'max_range'=>$max);  

         return filter_var($int,self::getOption('int'),self::$_data);  

     }  

    

     /**  

      * postInt 检查$_POST变量是否是整数  

      * <code>  

      * LFilter::postInt('id');  

      * </code>  

      *  

      * @param string $int  

      * @param int $min  

      * @param int $max  

      * @static  

      * @access public  

      * @return bool  

      */

     public static function postInt($int,$min=null,$max=null)  

     {  

         if($min||$max) self::$_data=array('min_range'=>$min,'max_range'=>$max);  

         return filter_input(INPUT_POST,$int,self::getOption('int'),self::$_data);  

     }  

    

     /**  

      * getString 检查$_GET变量是否为字符串  

      * <code>  

      * LFilter::getString('name');  

      * LFilter::getString('name','chars');  

      * </code>  

      *  

      * @param mixed $str  

      * @param string $type  

      * @static  

      * @access public  

      * @return void  

      */

     public static function getString($str,$type='string') {  

         return filter_input(INPUT_GET,$str,self::getOption($type));  

     }    

    

     /**  

      * checkString 检测变量是否为字符串  

      *  

      * @param string $string  

      * @param string $type  

      * @param array $flag  

      * @static  

      * @access public  

      * @return void  

      */

     public static function checkString($string,$type='string',$flag=array())  

     {  

         return filter_var($string,self::getOption($type));  

     }  

    

     /**  

      * postString 检测$_POST变量是否为字符串  

      *  

      * @param mixed $string  

      * @param string $type  

      * @param array $flag  

      * @static  

      * @access public  

      * @return void  

      */

     public static function postString($string,$type='string',$flag=array())  

     {  

         return filter_input(INPUT_POST,$string,self::getOption($type));  

     }  

    

     /**  

      * postFloat 检测是否为浮点数  

      * <code>  

      * LFilter::postFloat('price');  

      * </code>  

      *  

      * @param mixed $float  

      * @param mixed $decimal  

      * @param mixed $allow  

      * @static  

      * @access public  

      * @return void  

      */

     public static function postFloat($float,$decimal=null,$allow=true)  

     {  

         if($decimal) self::$_data['options']['decimal']=$decimal;  

         self::$_data['flags']=self::getOption('thousand');  

         return filter_input(INPUT_POST,$float,self::getOption('float'),self::$_data);  

     }  

    

     public static function getFloat($float,$decimal=null,$allow=true)  

     {  

         if($decimal) self::$_data['options']['decimal']=$decimal;  

         self::$_data['flags']=self::getOption('thousand');  

         return filter_input(INPUT_GET,$float,self::getOption('float'),self::$_data);  

     }  

    

     public static function checkFloat($float,$decimal=null,$allow=true)  

     {  

         if($decimal) self::$_data['options']['decimal']=$decimal;  

         self::$_data['flags']=self::getOption('thousand');  

         return filter_var($float,self::getOption('float'),self::$_data);  

     }  

    

     public static function postEmail($email)  

     {  

         return filter_input(INPUT_POST,$email,self::getOption('email'));  

     }  

    

     public static function getEmail($email)  

     {  

         return filter_input(INPUT_GET,$email,self::getOption('email'));  

     }  

    

     public static function checkEmail($email)  

     {  

         return filter_var($email,self::getOption('email'));  

     }  

    

     public static function postUrl($url)  

     {  

         return filter_input(INPUT_POST,$url,self::getOption('url'));  

     }  

    

     public static function getUrl($url)  

     {  

         return filter_input(INPUT_GET,$url,self::getOption('url'));  

     }  

    

     public static function checkUrl($url)  

     {  

         return filter_var($url,self::getOption('url'));  

     }  

    

     public static function postIp($ip)  

     {  

         return filter_input(INPUT_POST,$ip,self::getOption('ip'));  

     }  

    

     public static function getIp($ip)  

     {  

         return filter_input(INPUT_GET,$ip,self::getOption('ip'));  

     }  

    

     public static function checkIp($ip)  

     {  

         return filter_var($ip,self::getOption('ip'));  

     }  

     /**  

      * postArray 对$_POST形式$args数组进行过滤,返回数组  

      * eg:  

      * <code>  

      * $args = array(  

      *      'productId' => 'int',  

      *      'name'  => 'string',  

      *      'tagId' => array('int','array'),  

      *      'price' => array('float')  

      *  );  

      * LFilter::postArray($args);  

      * </code>  

      *  

      * @param string $args  

      * @access public  

      * @return array  

      */

     public function postArray($args,$type=false)  

     {  

         if(empty($_POST)) return NULL;  

         return filter_input_array(INPUT_POST,self::getArrayArgs($args));  

     }  

    

     public function getArray($args,$type=false) {  

         if ( empty($_GET) ) return NULL;  

         return filter_input_array(INPUT_GET,self::getArrayArgs($args));  

     }  

     /**  

      * filterVarArray 对数据$data,以$args数组条件进行过滤,返回数组  

      *  

      * eg:  

      * <code>  

      * $data = array(  

      *      'product_id'    => 'libgd<script>',  

      *      'component'     => '10',  

      *      'versions'      => '2.0.33',  

      *      'testscalar'    => array('2', '23', '10', '12'),  

      *      'testarray'     => '2',  

      *  );  

      * $args = array(  

      *      'product_id'   => 'string',  

      *      'component'    => array('int','',array('min_range' => 1, 'max_range' => 11)),  

      *      'testscalar'   => array('int','array'),  

      *      'testarray'    => array('int','array')  

      *  );  

      * LFilter::checkArray($data,$args);  

      * </code>  

      *  

      * @param mixed $args  

      * @access public  

      * @return array  

      */

     public function checkArray($data,$args,$type=false) {  

         if(empty($data)) return NULL;  

         $defs = self::getArrayArgs($args,$type);  

         return filter_var_array($data,$defs);  

     }  

    

     /**  

      * getArrayArgs  将过滤条件转换成filter函数处理的数组  

      *  

      * @param mixed $args  

      * @access public  

      * @return array  

      */

     public static function getArrayArgs($args,$type=null) {  

         $defs = array();  

         foreach ($args as $key => $arg) {  

             if(!is_array($arg)) $arg = array($arg);  

             if(isset($arg[0])) $defs[$key]['filter'] = self::getOption($arg[0]);  

             if(isset($arg[1])) $defs[$key]['flags'] = self::getOption($arg[1]);  

             if(isset($arg[2])) $defs[$key]['options'] = self::getOption($arg[2]);  

         }  

         return $defs;  

     }  

}  

?>

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3728/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2013-11-13 18:25
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]