在之前的文章中我们学习了$_get 变量与$_post 变量的相关知识,其中有提到关于安全性的问题,本篇文章中所要讲到的php过滤器就是用于验证和过滤来自非安全来源的数据,比如用户的输入。那接下来我们就来看一下php中的过滤器的相关知识,一起看看吧。
php过滤器
什么是过滤器,可以先把过滤器简单的理解为过滤掉不安全的数据。那我们为什么要使用过了不起呢?在我们的日常开发中几乎所有的web应用程序都会依赖外部的输入,这些数据通常都是来自类似web服务的其他应用程序或者来自用户。我们通过过滤器的使用能够确保应用程序能够获得正确的输入类型。
我们应该对像来自表单的输入数据、cookies、服务器变量和数据库查询结果等这样的外部数据进行过滤,对输入进行过滤是很重要的,因此我们需要使用过滤器。
php过滤器是用于验证和过滤来自非安全来源的数据,是测试、验证和过滤用户输入或者自定义数据时任何web应用程序的重要组成部分,它的设计目的就是为了是数据处理更轻松快捷。
函数和过滤器
当我们需要过滤变量的时候,可以使用很多过滤函数:filter_var() 通过一个指定的过滤器来过滤单一的变量;filter_var_array() 通过相同的或不同的过滤器来过滤多个变量;filter_input获取一个输入变量,并对它进行过滤;filter_input_array获取多个输入变量,并通过相同的或不同的过滤器对它们进行过滤。
接下来我们通过一个示例来看一下通过filter_var() 函数验证了一个整数,示例如下:
<?phpheader("content-type:text/html;charset=utf-8");$int = 123;if(!filter_var($int, filter_validate_int)){ echo("不是一个合法的整数");}else{ echo("是个合法的整数");}?>
输出结果:
上述示例便是通过filter_var() 过滤函数来验证了一个整数,接下来看一下我们常用的两种过滤器。
validating 过滤器:用于验证用户输入,有着严格的格式规则(比如 url 或 e-mail 验证),如果成功则返回预期的类型,如果失败则返回 false。
sanitizing 过滤器:用于允许或禁止字符串中指定的字符,无数据格式规则,始终返回字符串。
选项和标志
选项和标志用于向指定的过滤器添加额外的过滤选项。不同的过滤器有不同的选项和标志。
接下来我们通过示例来看一下用 filter_var() 和 "min_range" 以及 "max_range" 选项验证了一个整数,示例如下:
<?phpheader("content-type:text/html;charset=utf-8");$var=300;$int_options = array( "options"=>array ( "min_range"=>0, //最小值 "max_range"=>256 //最大值 ));if(!filter_var($var, filter_validate_int, $int_options)){ echo("不是一个合法的整数");}else{ echo("是个合法的整数");}?>
输出结果:
在上述示例中,需要注意的是:就像上面的代码一样,选项必须放入一个名为 "options" 的相关数组中。如果使用标志,则不需在数组内。由于整数是 "300",它不在指定的范围内,所以输出结果如上。
验证输入
接下来让我们试着验证来自表单的输入。我们需要做的第一件事情是确认是否存在我们正在查找的输入数据。然后我们用 filter_input() 函数过滤输入的数据。
接下来我们通过示例来看一下以get的方式输入变量 "email" 被传到 php 页面,示例如下:
<?phpheader("content-type:text/html;charset=utf-8");if(!filter_has_var(input_get, "email")){ echo("没有 email 参数");}else{ if (!filter_input(input_get, "email", filter_validate_email)) { echo "不是一个合法的 e-mail"; } else { echo "是一个合法的 e-mail"; }}?>
输出结果:
其中我们需要注意的是:上面的实例有一个通过 "get" 方法传送的输入变量 (email),检测是否存在 "get" 类型的 "email" 输入变量,如果存在输入变量,检测它是否是有效的 e-mail 地址。
净化输入
让我们试着清理一下从表单传来的 url。首先,我们要确认是否存在我们正在查找的输入数据。然后,我们用 filter_input() 函数来净化输入数据。
下面我们通过示例来看一下输入变量 "url" 被传到 php 页面,示例如下:
<?phpheader("content-type:text/html;charset=utf-8");if(!filter_has_var(input_get, "url")){ echo("没有 url 参数");}else{ $url = filter_input(input_get, "url", filter_sanitize_url); echo $url;}?>
输出结果:
其中我们需要注意的是:
filter_sanitize_url 过滤器删除字符串中所有非法的 url 字符。上面的实例有一个通过 get 方法传送的输入变量 (url):检测是否存在 get 类型的 url 输入变量,如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在 $url 变量中。
大家如果感兴趣的话,可以点击《php视频教程》进行更多关于php知识的学习。
以上就是三分钟带你搞定php过滤器(实例详解)的详细内容。