PHP内置过滤器FILTER使用实例


Posted in PHP onJune 25, 2014

在这一章节里, 我们来了解一个不太常用但功能强大的 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>";

?>

 
PHP 相关文章推荐
PHP Ajax中文乱码问题解决方法
Feb 27 PHP
php下载文件的代码示例
Jun 29 PHP
PHP超级全局变量数组小结
Oct 04 PHP
谈谈关于php的优点与缺点
Apr 11 PHP
基于php验证码函数的使用示例
May 03 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
curl和libcurl的区别简介
Jul 01 PHP
PHP类的封装与继承详解
Sep 29 PHP
CI分页类首页、尾页不显示的解决方法
Mar 28 PHP
PHP多个图片压缩成ZIP的方法
Aug 18 PHP
设定php简写功能的方法
Nov 28 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
Aug 06 PHP
PHP生成图片验证码、点击切换实例
Jun 25 #PHP
PHP生成随机密码类分享
Jun 25 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十二)
Jun 25 #PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
Jun 25 #PHP
JavaScript创建命名空间的5种写法
Jun 24 #PHP
PHP获取windows登录用户名的方法
Jun 24 #PHP
PHP获取MySql新增记录ID值的3种方法
Jun 24 #PHP
You might like
PHP对文件进行加锁、解锁实例
2015/01/23 PHP
十大使用PHP框架的理由
2015/09/26 PHP
php下载远程大文件(获取远程文件大小)的实例
2017/06/17 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
PHP添加PNG图片背景透明水印操作类定义与用法示例
2019/03/12 PHP
一个可以显示阴历的JS代码
2007/03/05 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
文本域光标操作的jQuery扩展分享
2014/03/10 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
js验证身份证号有效性并提示对应信息
2015/10/19 Javascript
JS简单实现String转Date的方法
2016/03/02 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
jQuery实现单击按钮遮罩弹出对话框效果(1)
2017/02/20 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
node.js实现上传文件功能
2019/07/15 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
TypeScript高级用法的知识点汇总
2019/12/17 Javascript
Node.js API详解之 dgram模块用法实例分析
2020/06/05 Javascript
Python采集腾讯新闻实例
2014/07/10 Python
Python中使用PyHook监听鼠标和键盘事件实例
2014/07/18 Python
Python中使用HTMLParser解析html实例
2015/02/08 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
python实现自动登录人人网并采集信息的方法
2015/06/28 Python
python实现判断数组是否包含指定元素的方法
2015/07/15 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
python 使用get_argument获取url query参数
2017/04/28 Python
详解Django-restframework 之频率源码分析
2019/02/27 Python
python能在浏览器能运行吗
2020/06/17 Python
Python 的 __str__ 和 __repr__ 方法对比
2020/09/02 Python
西班牙英格列斯百货法国官网:El Corte Inglés法国
2017/07/09 全球购物
英国最大的天然和有机产品在线零售商之一:Big Green Smile
2020/05/06 全球购物
八一慰问活动方案
2014/02/07 职场文书
婚前协议书范本
2014/04/15 职场文书
python获取字符串中的email
2022/03/31 Python