PHP过滤器(Filter)
2016-06-29 16:37
477 查看
PHP 过滤器用于验证和过滤来自非安全来源的数据。
几乎所有web应用程序都依赖外部的输入。
什么是外部数据:
.来自表单的输入数据
.Cookies
.服务端变量
.数据库查询结果
函数和过滤器
如需过滤变量,请使用下面的过滤器函数
.filter_var()-通过一个指定的过滤器来过滤单一的变量
.filter_var_array()-通过相同的或不同的过滤器来过滤多个变量
.filter_input-获取一个输入变量,并对它进行过滤
.filter_input_array-获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT)){
echo("Integer is not valid");
}else{
echo("Integer is valid");
}
?>
Validating 和 Sanitizing
Validating过滤器:
.用于验证用户输入
.严格的格式规则(比如URL或E-Mail验证)
.如果成功则返回预期的类型,如果失败则返回FALSE
Sanitizing过滤器:
.用于允许或禁止字符串中指定的字符
.无数据格式规则
.始终返回字符串
选项和标志
选项和标志用于向指定的过滤器添加额外的过滤选项。
不同的过滤器有不同的选项和标志
<?php
$var=300;
$int_options = array(
"option"=>array(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)){
echo("Integer is not valid");
}else{
echo("Integer is valid");
}
?>
验证输入
<?php
if(!filter_has_var(INPUT_GET, "email")){
echo("Input type does not exist");
}else{
if(!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)){
echo "E-Mail is not valid"
}else{
echo "E-Mail is valid";
}
}
?>
净化输入
首先,我们要确认是否存在我们正在查找的输入数据。
然后,我们用filter_input()函数来净化输入数据。
<?php
if(!filter_has_var(INPUT_POST), "url"){
echo("Input type does not exit");
}else{
$url = filter_input(INPUT_POST,"url",FILTER_SANITIZE_URL);
}
?>
过滤多个输入
表单通常由多个输入字段组成。为了避免对filter_var或filter_input重复调用,我们可以使用filter_var_array或 filter_input_array函数
我们使用filter_input_array()函数来过滤三个GET变量。
<?php
$filters = array(
"name"=>array(
"filter"=>FILITER_SANITIZE
),
"age"=>array(
"filter"=>FILTER_VALIDATE_INT,
"option"=>array(
"min_range"=>1,
"max_range"=>120
)
),
"email"=>FILITER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);
if(!$result["age"]){
echo("Age must be a number between 1 and 120.<br />");
}else if(!result["email"]){
echo("E-Mail is not valid.<br />");
}else{
echo("User input is valid");
}
?>
使用Filter Callback
通过使用FILTER_CALLBACK过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
<?php
function convertSpace($sting){
return str_replace("_"," ", $string);//将"-"转换成空格
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>
几乎所有web应用程序都依赖外部的输入。
什么是外部数据:
.来自表单的输入数据
.Cookies
.服务端变量
.数据库查询结果
函数和过滤器
如需过滤变量,请使用下面的过滤器函数
.filter_var()-通过一个指定的过滤器来过滤单一的变量
.filter_var_array()-通过相同的或不同的过滤器来过滤多个变量
.filter_input-获取一个输入变量,并对它进行过滤
.filter_input_array-获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤
<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT)){
echo("Integer is not valid");
}else{
echo("Integer is valid");
}
?>
Validating 和 Sanitizing
Validating过滤器:
.用于验证用户输入
.严格的格式规则(比如URL或E-Mail验证)
.如果成功则返回预期的类型,如果失败则返回FALSE
Sanitizing过滤器:
.用于允许或禁止字符串中指定的字符
.无数据格式规则
.始终返回字符串
选项和标志
选项和标志用于向指定的过滤器添加额外的过滤选项。
不同的过滤器有不同的选项和标志
<?php
$var=300;
$int_options = array(
"option"=>array(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options)){
echo("Integer is not valid");
}else{
echo("Integer is valid");
}
?>
验证输入
<?php
if(!filter_has_var(INPUT_GET, "email")){
echo("Input type does not exist");
}else{
if(!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)){
echo "E-Mail is not valid"
}else{
echo "E-Mail is valid";
}
}
?>
净化输入
首先,我们要确认是否存在我们正在查找的输入数据。
然后,我们用filter_input()函数来净化输入数据。
<?php
if(!filter_has_var(INPUT_POST), "url"){
echo("Input type does not exit");
}else{
$url = filter_input(INPUT_POST,"url",FILTER_SANITIZE_URL);
}
?>
过滤多个输入
表单通常由多个输入字段组成。为了避免对filter_var或filter_input重复调用,我们可以使用filter_var_array或 filter_input_array函数
我们使用filter_input_array()函数来过滤三个GET变量。
<?php
$filters = array(
"name"=>array(
"filter"=>FILITER_SANITIZE
),
"age"=>array(
"filter"=>FILTER_VALIDATE_INT,
"option"=>array(
"min_range"=>1,
"max_range"=>120
)
),
"email"=>FILITER_VALIDATE_EMAIL,
);
$result = filter_input_array(INPUT_GET, $filters);
if(!$result["age"]){
echo("Age must be a number between 1 and 120.<br />");
}else if(!result["email"]){
echo("E-Mail is not valid.<br />");
}else{
echo("User input is valid");
}
?>
使用Filter Callback
通过使用FILTER_CALLBACK过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。这样,我们就拥有了数据过滤的完全控制权。
<?php
function convertSpace($sting){
return str_replace("_"," ", $string);//将"-"转换成空格
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- jQuery plugin items filter
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- rem : web app适配的秘密武器
- jquery高级应用之Deferred对象
- php7 读取php.ini[4]
- 全国哀悼日网站页面变成灰色的filter方法
- 用css filter做鼠标滑过图片效果
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP