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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
在PHP中操作Excel实例代码
Apr 29 PHP
二招解决php乱码问题
Mar 25 PHP
PHP 登录记住密码实现思路
May 07 PHP
php class中public,private,protected的区别以及实例分析
Jun 18 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
Aug 25 PHP
PHP获取数组的键与值方法小结
Jun 13 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
PHP中strnatcmp()函数“自然排序算法”进行字符串比较用法分析(对比strcmp函数)
Jan 07 PHP
详解PHP原生DOM对象操作XML的方法
Oct 17 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 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防攻击代码升级版
2010/12/29 PHP
php多用户读写文件冲突的解决办法
2013/11/06 PHP
ECshop 迁移到 PHP7版本时遇到的兼容性问题
2016/02/15 PHP
PHP基于面向对象封装的分页类示例
2019/03/15 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
JQuery 写的个性导航菜单
2009/12/24 Javascript
基于jQuery的投票系统显示结果插件
2011/08/12 Javascript
Jquery 的扩展方法总结
2011/10/01 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【一】
2016/05/10 Javascript
简单实现js页面切换功能
2021/01/10 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
JS文件中加载jquery.js的实例代码
2018/05/05 jQuery
微信小程序签到功能
2018/10/31 Javascript
Vue项目引进ElementUI组件的方法
2018/11/11 Javascript
vue自定义指令directive的使用方法
2019/04/07 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
VUE实现强制渲染,强制更新
2019/10/29 Javascript
vue实现微信浏览器左上角返回按钮拦截功能
2020/01/18 Javascript
vue 实现tab切换保持数据状态
2020/07/21 Javascript
React服务端渲染原理解析与实践
2021/03/04 Javascript
Python安装Numpy和matplotlib的方法(推荐)
2017/11/02 Python
Python 删除连续出现的指定字符的实例
2018/06/29 Python
Python单元测试模块doctest的具体使用
2020/02/10 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
python 6行代码制作月历生成器
2020/09/18 Python
Python使用grequests并发发送请求的示例
2020/11/05 Python
python向xls写入数据(包括合并,边框,对齐,列宽)
2021/02/02 Python
基于Html5实现的语音搜索功能
2019/05/13 HTML / CSS
ghd官网:英国ghd直发器品牌
2018/05/04 全球购物
美国正版电视节目和电影在线观看:Hulu
2018/05/24 全球购物
Fabletics官网:美国运动服饰品牌,由好莱坞女演员凯特·哈德森创立
2019/10/19 全球购物
小小商店教学反思
2014/04/27 职场文书
教师年度个人总结
2015/02/11 职场文书
被告答辩状范文
2015/05/22 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
python中urllib包的网络请求教程
2022/04/19 Python