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脚本
Nov 26 PHP
中国站长站 For Dede4.0 采集规则
May 27 PHP
PHP 程序员也要学会使用“异常”
Jun 16 PHP
PHP中strtotime函数使用方法详解
Nov 27 PHP
php对称加密算法示例
May 07 PHP
PHP把小数转成整数3种方法
Jun 30 PHP
CI操作cookie的方法分析(基于helper类库)
Mar 28 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
php实现查询功能(数据访问)
May 23 PHP
详解PHP处理字符串类似indexof的方法函数
Jun 11 PHP
PHP DB 数据库连接类定义与用法示例
Mar 11 PHP
微信公众平台开发教程②微信端分享功能图文详解
Apr 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支持断点续传的源码
2010/05/16 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
2011/09/25 PHP
php实现的农历算法实例
2015/08/11 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
2016/07/18 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
使javascript也能包含文件
2006/10/26 Javascript
jQuery使用手册之二 DOM操作
2007/03/24 Javascript
javascript下利用arguments实现string.format函数
2010/08/24 Javascript
一道JS前端闭包面试题解析
2015/12/25 Javascript
学习JavaScript设计模式之观察者模式
2020/04/22 Javascript
第十章之巨幕页头缩略图与警告框组件
2016/04/25 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
JavaScript代码性能优化总结篇
2016/05/15 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
JavaScript实现定时页面跳转功能示例
2017/02/14 Javascript
layer弹出层显示在top顶层的方法
2019/09/11 Javascript
vue页面加载时的进度条功能(实例代码)
2020/01/13 Javascript
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
最新版 Windows10上安装Python 3.8.5的步骤详解
2020/11/28 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
HTML5 Video/Audio播放本地文件示例介绍
2013/11/18 HTML / CSS
法国购买隐形眼镜和眼镜网站:Optical Center
2019/10/08 全球购物
在数据文件自动增长时,自动增长是否会阻塞对文件的更新
2014/05/01 面试题
工程现场管理求职自荐信
2013/10/02 职场文书
厨师岗位职责
2013/11/12 职场文书
机电一体化自荐信
2013/12/10 职场文书
经销商培训邀请函
2014/01/21 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015年保安个人工作总结
2015/04/02 职场文书
2015年网络管理员工作总结
2015/05/21 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
2016年庆祝六一儿童节活动总结
2016/04/06 职场文书
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏
Golang MatrixOne使用介绍和汇编语法
2022/04/19 Golang