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"));
?>