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 相关文章推荐
用libTemplate实现静态网页的生成
Oct 09 PHP
PHP安装攻略:常见问题解答(一)
Oct 09 PHP
PHP 年龄计算函数(精确到天)
Jun 07 PHP
对于PHP 5.4 你必须要知道的
Aug 07 PHP
header导出Excel应用示例
Jan 24 PHP
php异常处理使用示例
Feb 25 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
Dec 16 PHP
php中ob_flush函数和flush函数用法分析
Mar 18 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
PHP读取PPT文件的方法
Dec 10 PHP
PHP+sqlite数据库操作示例(创建/打开/插入/检索)
May 26 PHP
PHP实现APP微信支付的实例讲解
Feb 10 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 session有效期问题
2009/04/26 PHP
PHPLog php 程序调试追踪工具
2009/09/09 PHP
php strcmp使用说明
2010/04/22 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
php使用Image Magick将PDF文件转换为JPG文件的方法
2015/04/01 PHP
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
php静态成员方法和静态的成员属性的使用方法
2017/10/26 PHP
PHP静态方法和静态属性及常量属性的区别与介绍
2019/03/22 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
js获取当前日期代码适用于网页头部
2013/06/27 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
JavaScript运行时库属性一览表
2014/03/14 Javascript
JSON取值前判断
2014/12/23 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
JavaScript下拉菜单功能实例代码
2017/03/01 Javascript
Vue列表页渲染优化详解
2017/07/24 Javascript
浅谈FastClick 填坑及源码解析
2018/03/02 Javascript
React Component存在的几种形式详解
2018/11/06 Javascript
node.js中fs文件系统模块的使用方法实例详解
2020/02/13 Javascript
es6函数之箭头函数用法实例详解
2020/04/25 Javascript
[01:02:34]TFT vs VGJ.T Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
Flask SQLAlchemy一对一,一对多的使用方法实践
2013/02/10 Python
使用python编写android截屏脚本双击运行即可
2014/07/21 Python
Python实现Youku视频批量下载功能
2017/03/14 Python
对python的文件内注释 help注释方法
2018/05/23 Python
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
pandas 将索引值相加的方法
2018/11/15 Python
PyTorch搭建多项式回归模型(三)
2019/05/22 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
Europcar比利时:租车
2019/08/26 全球购物
Mybag美国/加拿大:英国奢华包包和名牌手袋网站
2020/02/16 全球购物
大学生实习感言
2014/01/16 职场文书
办公室人员先进事迹
2014/01/27 职场文书
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android