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 相关文章推荐
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
zf框架的session会话周期及次数限制使用示例
Mar 13 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
May 04 PHP
一个简单的PHP验证码实现代码
May 10 PHP
兼容各大浏览器带关闭按钮的漂浮多组图片广告代码
Jun 05 PHP
php实现的短网址算法分享
Jun 20 PHP
php实现获取文章内容第一张图片的方法
Nov 04 PHP
PHP实现格式化文件数据大小显示的方法
Jan 03 PHP
在Nginx上部署ThinkPHP项目教程
Feb 02 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
PHP 枚举类型的管理与设计知识点总结
Feb 13 PHP
is_file和file_exists效率比较
Mar 14 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
屏蔽浏览器缓存另类方法
2006/10/09 PHP
php 文章采集正则代码
2009/12/28 PHP
通过Email发送PHP错误的方法
2015/07/20 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
js注意img图片的onerror事件的分析
2011/01/01 Javascript
JavaScript中的noscript元素属性位置及作用介绍
2013/04/11 Javascript
使用js显示当前时间示例
2014/03/02 Javascript
JavaScript设计模式之适配器模式介绍
2014/12/28 Javascript
Jquery轮播效果实现过程解析
2016/03/30 Javascript
BootStrap下拉菜单和滚动监听插件实现代码
2016/09/26 Javascript
利用JQuery直接调用asp.net后台的简单方法
2016/10/27 Javascript
原生JS中slice()方法和splice()区别
2017/03/06 Javascript
微信小程序promsie.all和promise顺序执行
2017/10/27 Javascript
js实现动态改变radio状态的方法
2018/02/28 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
[04:29]2014DOTA2国际邀请赛 主赛事第三日TOPPLAY
2014/07/21 DOTA
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python 实现数据结构-循环队列的操作方法
2019/07/17 Python
Python绘制股票移动均线的实例
2019/08/24 Python
Python 异步协程函数原理及实例详解
2019/11/13 Python
Python3如何判断三角形的类型
2020/04/12 Python
Python中的xlrd模块使用原理解析
2020/05/21 Python
CSS3颜色值RGBA与渐变色使用介绍
2020/03/06 HTML / CSS
世界上最好的威士忌和烈性酒购买网站:The Whisky Exchange
2016/11/20 全球购物
送给他或她的礼物:FUN.com
2018/08/17 全球购物
阿姆斯特丹杜莎夫人蜡像馆官方网站:Madame Tussauds Amsterdam
2019/03/12 全球购物
优秀学生干部先进事迹材料
2014/05/26 职场文书
村党支部书记个人对照材料汇报
2014/10/26 职场文书
2014年计划生育协会工作总结
2014/11/14 职场文书
宣传部部长竞选稿
2015/11/21 职场文书
2016年度农村党员干部主题教育活动总结
2016/04/06 职场文书
python中__slots__节约内存的具体做法
2021/07/04 Python
Python利用capstone实现反汇编
2022/04/06 Python