PHP过滤器详细信息

什么是PHP过滤器?PHP过滤器用于验证和过滤来自非安全来源的数据 测试、验证和过滤用户输入或自定义数据是任何网络应用程序的重要组成部分 PHP的过滤器扩展旨在使数据过滤更加容易和快速。

几乎所有的网络应用都依赖外部输入 这些数据通常来自用户或其他应用程序(如web) ,通过使用过滤器,您可以确保您的应用程序获得正确的输入类型

外部数据如下:

  • 来自表单的输入数据
    Cookies
    Web services data
    服务器变量
    数据库查询结果

如果还需要过滤变量,使用下面的过滤器函数之一即可:

  • filter_var() – 通过一个指定的过滤器来过滤单一的变量
  • filter_var_array() – 通过相同的或不同的过滤器来过滤多个变量
  • filter_input – 获取一个输入变量,并对它进行过滤
  • filter_input_array – 获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤

在下面的实例中,我们已经使用 filter_var() 函数验证了一个整数:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
{
echo("Integer is not valid");
}
else
{
echo("Integer is valid");
}
?>

上面的代码使用了 “FILTER_VALIDATE_INT” 过滤器来过滤变量。由于这个整数是合法的,故上面的代码将输出:”Integer is valid”。

如果我们尝试使用一个非整数的变量(比如 “123abc”),则将输出:”Integer is not valid”。

Validating 和 Sanitizing

有两种过滤器:

Validating 过滤器:

  • 用于验证用户输入
  • 严格的格式规则(比如 URL 或 E-Mail 验证)
  • 如果成功则返回预期的类型,如果失败则返回 FALSE

Sanitizing 过滤器:

  • 用于允许或禁止字符串中指定的字符Are used to allow or disallow specified characters in a string
  • 无数据格式规则
  • 始终返回字符串

选项和标志

选项和标志用于向指定的过滤器添加额外的过滤选项。

不同的过滤器有不同的选项和标志。

在下面的实例中,我们用 filter_var() 和 “min_range” 以及 “max_range” 选项验证了一个整数:

<?php
$var=300;

$int_options = array(
"options"=>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");
}
?>
像上面的代码一样,选项必须放在一个名为“选项”的相关数组中如果使用标志,它们不需要在数组中。

由于整数是“300”,它不在指定范围内,上述代码的输出将是“整数无效”。

有关函数和过滤器的完整列表,请访问我们的PHP过滤器参考手册。您可以看到每个过滤器的可用选项和标志。

验证输入
让我们尝试验证表单的输入。

我们需要做的第一件事是确认我们正在寻找的输入数据是否存在。

然后我们使用filter_input()函数来过滤输入数据。

在下面的例子中,输入变量“email”被传递到PHP页面:

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

 示例说明
上面的例子通过“GET”方法传递了一个输入变量(电子邮件):

检测是否有“GET”类型的“email”输入变量
如果有输入变量,请检查它是否是有效的电子邮件地址。

纯化输入
让我们尝试从表单中清除网址。

首先,我们需要确认我们正在寻找的输入数据是否存在。

然后,我们使用filter_input()函数来净化输入数据。

在以下示例中,输入变量“url”被传递到PHP页面:

<?php
if(!filter_has_var(INPUT_POST, "url"))
{
echo("Input type does not exist");
}
else
{
$url = filter_input(INPUT_POST, 
"url", FILTER_SANITIZE_URL);
}
?>


示例说明
上面的例子有一个通过“开机自检”方法传递的输入变量(网址):

检测是否有“开机自检”类型的“网址”输入变量
如果该输入变量存在,请将其纯化(删除非法字符),并将其存储在$url变量中

过滤多个输入
表单通常由多个输入字段组成。为了避免重复调用filter_var或filter_input函数,我们可以使用filter_var_array或filter_input_array函数。

在这个例子中,我们使用filter_input_array()函数来过滤三个GET变量。收到的GET变量是姓名、年龄和电子邮件地址:

<?php
$filters = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" => array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
),
"email"=> FILTER_VALIDATE_EMAIL
);

$result = filter_input_array(INPUT_GET, $filters);

if (!$result["age"])
{
echo("Age must be a number between 1 and 120.<br>");
}
elseif(!$result["email"])
{
echo("E-Mail is not valid.<br>");
}
else
{
echo("User input is valid");
}
?>


示例说明
上面的例子通过“GET”方法传递了三个输入变量(姓名、年龄和电子邮件):

设置一个数组,该数组包含输入变量的名称和指定输入变量的筛选器
调用filter_input_array()函数,参数包括GET输入变量和刚刚设置的数组。
检测$result变量中“年龄”和“电子邮件”变量的非法输入。(如果有非法输入,使用filter_input_array()函数后,输入变量为FALSE。)
filter_input_array()函数的第二个参数可以是数组或单个筛选器的标识。

如果参数是单个筛选器的标识,指定的筛选器将筛选输入数组中的所有值。

如果参数是数组,数组必须遵循以下规则:

必须是关联数组,其中包含作为数组键的输入变量(如“年龄”输入变量)
该数组的值必须是筛选器的标识或指定筛选器、标志和选项的数组
使用过滤器调用
通过使用FILTER_CALLBACK筛选器,您可以调用自定义函数并将其用作筛选器。这样,我们可以完全控制数据过滤。

您可以创建自己的自定义函数或使用现有的PHP函数。

应根据指定选项的指定方法指定您打算使用的过滤器的功能。在关联数组中,有一个名称“选项”。

在以下示例中,我们使用自定义函数将所有“_ _”转换为空格:
<?php
function convertSpace($string)
{
return str_replace("_", " ", $string);
}

$string = "Peter_is_a_great_guy!";

echo filter_var($string, FILTER_CALLBACK,
array("options"=>"convertSpace"));
?>

上述代码的结果如下:

Peter is a great guy!

 

示例说明
以上示例将所有“_ _”转换为空格:

创建一个用空格替换“_ _”的函数
调用filter_var()函数,其参数是FILTER_CALLBACK筛选器和包含我们函数的数组

转载请注明出处:PHP过滤器详细信息

本文链接:https://www.cmezy.com/blog/phpglq

 

评论0

请先

没有账号? 忘记密码?