PHP内置过滤器FILTER使用实例

在这一章节里, 我们来了解一个不太常用但功能强大的 PHP 特性: FILTERS, 该扩展可以用来验证(validation)和纠错(sanitization)
 
当数据源含有未知或不确定数据时,将变得非常有用, 最多是用来处理由客户从 HTML 表单(form)提交的数据
 
该扩展含有两个主要的过滤类型: 验证(validation)和纠错(sanitization)
 
验证(validation)主要用来检查数据是不是符合特定条件, 例如: 当传入 FILTER_VALIDATE_EMAIL 时, 它将检查该邮件地址是否有效, 当发现不符合规范时, 不会进行纠错处理
 
纠错(sanitization)将会对数据进行处理, 将不符合规范的字符进行转换或移除, 例如: 当传入 FILTER_SANITIZE_EMAIL 时, 它将会处理邮件地址所包含不符合规范的字符, 但不会去检查该邮件地址是否有效

详细可见: http://in.php.net/manual/en/book.filter.php
提示: FILTER 在 PHP 5.2 版本中被加入

这里介绍一下验证(validation) Filters

代码如下:

FILTER_VALIDATE_BOOLEAN:  把值作为布尔选项来验证,对 "1", "true", "on" 和 "yes" 返回 TRUE, 其余的都返回 FALSE
FILTER_VALIDATE_EMAIL:    把值作为邮件地址来验证
FILTER_VALIDATE_FLOAT:    把值作为浮点数来验证
FILTER_VALIDATE_INT:      以整数验证值,可以选择范围
FILTER_VALIDATE_IP:       把值作为 IP 进行验证
FILTER_VALIDATE_REGEXP:   根据兼容 Perl 的正则表达式来验证值
FILTER_VALIDATE_URL:      把值作为 URL 进行验证

范例:
 
验证邮件地址(Email Address):

代码如下:

<?php
$email_a = 'onedayin2013@shawn.com';
$email_b = 'invalid@email';
 
if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "This ($email_a) email address is valid.";
} else {
    echo "This ($email_a) email address is invalid.";
}
 
if (filter_var($email_b, FILTER_VALIDATE_EMAIL)) {
    echo "This ($email_b) email address is valid.";
} else {
    echo "This ($email_b) email address is invalid.";
}
 
//输出以下内容:
This (onedayin2013@shawn.com) email address is valid.
This (invalid@email) email address is invalid.
?>

验证 IP 地址:

代码如下:

<?php
$ip_a = '127.0.0.1';
$ip_b = '52.69';
 
if (filter_var($ip_a, FILTER_VALIDATE_IP)) {
    echo "This ($ip_a) IP address is valid.";
}else{
    echo "This ($ip_a) IP address is invalid.";
}
if (filter_var($ip_b, FILTER_VALIDATE_IP)) {
    echo "This ($ip_b) IP address is valid.";
}else{
    echo "This ($ip_b) IP address is invalid.";
}
 
//输出以下内容:
This (127.0.0.1) IP address is valid.
This (52.69) IP address is invalid.
?>

纠错(sanitization) Filters

代码如下:

FILTER_SANITIZE_EMAIL:         移除所有字符, 除了字母,数字和 !#$%&'*+-/=?^_`{|}~@.[].
FILTER_SANITIZE_ENCODED:       去除 URL 编码不需要的字符, 与 urlencode() 函数很类似
FILTER_SANITIZE_MAGIC_QUOTES:  在指定的预定义字符前添加反斜杠, 单引号(')、双引号(")、反斜线(\)与 NULL
FILTER_SANITIZE_NUMBER_FLOAT:  移除所有字符, 除了数字,+- 和可选(.,)
FILTER_SANITIZE_NUMBER_INT:    移除所有字符, 除了数字和 +-
FILTER_SANITIZE_SPECIAL_CHARS: 用于对 "<>& 以及 ASCII 值在 32 值以下的字符进行转义
FILTER_SANITIZE_STRING:        删除那些对应用程序有潜在危害的数据。它用于去除标签以及删除或编码不需要的字符
FILTER_SANITIZE_STRIPPED:      去除或编码不需要的字符,是 FILTER_SANITIZE_STRING 的别名
FILTER_SANITIZE_URL:           移除所有字符, 除了字母,数字和 $-_.+!*'(),{}|\\^~[]`<>#%";/?:@&=.
FILTER_UNSAFE_RAW:             不进行任何过滤,去除或编码特殊字符

范例:

代码如下:

<?php
$invalid_email = "(corrupted@foo dot com)";
 
if (!filter_var($invalid_email, FILTER_VALIDATE_EMAIL)) {
    $sanitized_email = filter_var($invalid_email, FILTER_SANITIZE_EMAIL);
    echo "This ($invalid_email) email address is invalid.";
    echo "Sanitized  Email is:  $sanitized_email";   
}
 
//输出以下内容:
This ((corrupted@foo dot com)) email address is invalid.
Sanitized  Email is:  corrupted@foo.com
?>

过滤 GET 和 POST 变量

代码如下:

filter_input(input_type, variable, filter, options)
 
//函数从脚本外部获取输入,用于对来自非安全来源的变量进行验证,比如用户的输入
//可以从以下来源获取输入
INPUT_GET  INPUT_POST  INPUT_COOKIE  INPUT_ENV  INPUT_SERVER

代码如下:

input_type  规定输入类型, 参见上面可能的类型
variable    规定要过滤的变量
filter      可选。规定要使用的过滤器的 ID。默认是 FILTER_SANITIZE_STRING。

范例:

代码如下:

<?php
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url  = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
 
echo "You have searched for $search_html.";
echo "<a href="sunzhenghua.com?search=$search_url">Search again.</a>";
?>

(0)

相关推荐

  • php中使用array_filter()函数过滤空数组的实现代码

    今天在翻看手册查询array_filter()的使用细节时,看到了个小关键点:If no callback is supplied, all entries of input equal to FALSE (see converting to boolean) will be removed. 如果没有给出回调函数,所有的等于 FALSE 的元素将会被移除掉,这不正好可以用来过滤一些有空元素的数组吗?连忙写个例子测试一下想法: 复制代码 代码如下: $entry = array( 0 => '蓝

  • PHP Filter过滤器全面解析

    PHP 过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入. 什么是 PHP 过滤器? PHP 过滤器用于验证和过滤来自非安全来源的数据. 验证和过滤用户输入或自定义数据是任何 Web 应用程序的重要组成部分. 设计 PHP 的过滤器扩展的目的是使数据过滤更轻松快捷. 为什么使用过滤器? 几乎所有 web 应用程序都依赖外部的输入.这些数据通常来自用户或其他应用程序(比如 web 服务).通过使用过滤器,您能够确保应有程序获得正确的输入类型. 您应该始终对外部数据进行过滤! 输入过滤是最重

  • 巧用php中的array_filter()函数去掉多维空值的代码分享

    其实我们可以利用array_filter函数轻松去掉多维空值,而数组的下标没有改变,下面是举例用法: <?php $array = array( 0 => '滔哥', 1 => false, 2 => 1, 3 => null, 4 => '', 5 => 'http://www.jb51.net', 6 => '0' ); print_r(array_filter($array)); ?> 上面代码输出结果为: Array ( [0] => 滔

  • php中filter函数验证、过滤用户输入的数据

    PHP Filter 简介 PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤. 复制代码 代码如下: //除去html标签,或除去编码特殊字符 var_dump(filter_var("<html>中文ABC@#</html><script>abc</script><b>BBB</b><span>",FILTER_SANITIZE_STRING)); //url_encoded编码

  • php preg_filter执行一个正则表达式搜索和替换

    preg_filter (PHP 5 >= 5.3.0) preg_filter - 执行一个正则表达式搜索和替换 mixed preg_filter ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] ) preg_filter()等价于preg_replace() 除了它仅仅返回(可能经过转化)与目标匹配的结果. 这个函数怎样工作的更详细信息请阅读 preg

  • php使用filter过滤器验证邮箱 ipv6地址 url验证

    1.验证邮箱 复制代码 代码如下: $email = 'jb51@qq.com';$result = filter_var($email, FILTER_VALIDATE_EMAIL);var_dump($result); //string(14) "jb51@qq.com" 2.验证url地址 复制代码 代码如下: $url = "http://www.jb51.net";$result = filter_var($url, FILTER_VALIDATE_URL

  • PHP filter_var() 函数 Filter 函数

    filter_var() 函数通过指定的过滤器过滤变量. 如果成功,则返回已过滤的数据,如果失败,则返回 false. 语法 filter_var(variable, filter, options)variable:必需.规定要过滤的变量. filter:可选.规定要使用的过滤器的 ID. (参见下面的FiltersID列表) options:规定包含标志/选项的数组.检查每个过滤器可能的标志和选项. 复制代码 代码如下: <? @header('content-type:text/html;

  • php array_filter除去数组中的空字符元素

    除去数组中的空字符元素 复制代码 代码如下: <?php $str1_array=array('我们','','http://www.jb51.net','','1654',''); $str1_array=array_filter($str1_array); print_r($str1_array); ?> 显示结果: 复制代码 代码如下: Array ( [0] => 我们 [2] => http://www.jb51.net [4] => 1654 )

  • PHP内置过滤器FILTER使用实例

    在这一章节里, 我们来了解一个不太常用但功能强大的 PHP 特性: FILTERS, 该扩展可以用来验证(validation)和纠错(sanitization)   当数据源含有未知或不确定数据时,将变得非常有用, 最多是用来处理由客户从 HTML 表单(form)提交的数据   该扩展含有两个主要的过滤类型: 验证(validation)和纠错(sanitization)   验证(validation)主要用来检查数据是不是符合特定条件, 例如: 当传入 FILTER_VALIDATE_E

  • AngularJS过滤器filter用法实例分析

    本文实例讲述了AngularJS过滤器filter用法.分享给大家供大家参考,具体如下: 这节我们来看看angularjs的过滤器filter. 在我们开发中经常需要在页面显示给用户的信息需要一定处理格式化,才能显示给用户.比如时间本地化,或者yyyy-MM-dd HH:mm:ss格式,数字精度格式化,本地化,人名格式化等等.在angularjs中为我们提供了叫filter的指令,让我们能够很轻易就能做到着一些列的功能,angularjs内部为我们提供了number等很多内置的filter.并且

  • Angular实现的内置过滤器orderBy排序与模糊查询功能示例

    本文实例讲述了Angular实现的内置过滤器orderBy排序与模糊查询功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>www.jb51.net Angular模糊查询.排序</title> <style> *{ ma

  • AngularJS的内置过滤器详解

    今天我们来了解一下AngularJS的内置过滤器 先来看看这些内置过滤器使用方法: 一个过滤器,不带参数的情况 {{expression | filter}} 一个过滤器,带参数的情况 {{expression | filter:arguments}} 一个过滤器,带多个参数的情况 {{expression | filter: arg1: arg2: ...}} 多个过滤器,不带参数的情况 {{expression | filter1 | filter2 | ...}} 下面我们分别使用以下An

  • 详解Angular的内置过滤器和自定义过滤器【推荐】

    在实际的开发过程中,很多後端返回给我们的数据都是需要格式化处理的,在angular中为我们内置提供了filter指令,可以很方便的对数据进行处理.首先我们看看在视图中是如何使用过滤器的. 1.currency(货币)格式化 <div ng-controller="Aaa"> <p>{{name | currency:'¥'}}</p> </div> <script type="text/javascript"&g

  • 对Django中内置的User模型实例详解

    User模型 User模型是这个框架的核心部分.他的完整的路径是在django.contrib.auth.models.User. 字段 内置的User模型拥有以下的字段: 1.username: 用户名.150个字符以内.可以包含数字和英文字符,以及_.@.+..和-字符.不能为空,且必须唯一! 2.first_name:歪果仁的first_name,在30个字符以内.可以为空. 3.last_name:歪果仁的last_name,在150个字符以内.可以为空. 4.email:邮箱.可以为空

  • Spring Security内置过滤器的维护方法

    目录 内置过滤器的顺序 注册过滤器的逻辑 获取已注册过滤器的顺序值 HttpSecurity维护过滤器的方法 addFilterAtOffsetOf addFilter系列方法 问题来了 Spring Security中的内置过滤器顺序是怎么维护的?我想很多开发者都对这个问题感兴趣.本篇我和大家一起探讨下这个问题. HttpSecurity包含了一个成员变量FilterOrderRegistration,这个类是一个内置过滤器注册表.至于这些过滤器的作用,不是本文介绍的重点,有兴趣可以去看看Fi

  • python 内置函数filter

    python 内置函数filter class filter(object): """ filter(function or None, iterable) --> filter object Return an iterator yielding those items of iterable for which function(item) is true. If function is None, return the items that are true. &

  • Spring Boot 定制与优化内置的Tomcat容器实例详解

    1.Spring Boot 定制与优化内置Tomcat容器. > 内置的容器有三个分别是Undertow.Jetty.Tomcat,Spring Boot 对这三个容器分别进行了实现,它们上层接口都是EmbeddedServletContainerFactory,该接口也是本文的主要核心. 对于内置容器的定制与优化主要有两种方式,第一种方式是通过配置文件来配置,另外一种是通过码代码的方式.接下来主要对上述两种方式进行实现. 2.通过配置文件来定制与优化Tomcat > 配置的核心内容参考org

  • python模块内置属性概念及实例

    我们在讲模块的时候,有些人看到了内置属性,就把它们当做函数,其实还是有区别的,这里需要为大家进行明确.我们所看到的函数两边带有双下划线,这是python模块中内置属性的体现.下面我们就内置属性进性说明,并列出几种内置属性的方法,最后带来实例供大家体会. 1.说明 一种导入的方法,可以使用 import 直接把模块内(函数,变量的)名称导入到当前操作模块. 2.内置属性 __doc__:模块中用于描述的文档字符串 __name__:模块名 __file__:模块保存的路径 __dict__ : 类

随机推荐