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 相关文章推荐
IIS环境下快速安装、配置和调试PHP5.2.0
Dec 17 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
PHP设计模式 注册表模式(多个类的注册)
Feb 05 PHP
PHP中::、-&amp;gt;、self、$this几种操作符的区别介绍
Apr 24 PHP
php与java通过socket通信的实现代码
Oct 21 PHP
PHP模板引擎Smarty的缓存使用总结
Apr 24 PHP
PHP实现的增强性mhash函数
May 27 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
php防止用户重复提交表单
Nov 02 PHP
mysql查找删除重复数据并只保留一条实例详解
Sep 24 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
laravel中命名路由的使用方法
Feb 24 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实现验证码功能
2006/10/09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
PHP与MySQL开发的8个技巧小结
2010/12/17 PHP
浅谈php的优缺点
2015/07/14 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
thinkPHP3.2.3结合Laypage实现的分页功能示例
2018/05/28 PHP
jquery调用wcf并展示出数据的方法
2011/07/07 Javascript
javascript学习笔记(十七) 检测浏览器插件代码
2012/06/20 Javascript
按下Enter焦点移至下一个控件的实现js代码
2013/12/11 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
js Canvas实现圆形时钟教程
2016/09/19 Javascript
jQuery实现删除li节点的方法
2016/12/06 Javascript
利用JS做网页特效_大图轮播(实例讲解)
2017/08/09 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
Python实现Windows上气泡提醒效果的方法
2015/06/03 Python
Django如何开发简单的查询接口详解
2019/05/17 Python
Python tkinter三种布局实例详解
2020/01/06 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
pandas创建DataFrame的7种方法小结
2020/06/14 Python
西班牙创意礼品和小工具网上商店:Curiosite
2016/07/26 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
土木工程毕业生自荐信
2013/09/21 职场文书
医科学校毕业生自荐信
2013/11/09 职场文书
2014年党风廉政建设工作总结
2014/11/19 职场文书
生死牛玉儒观后感
2015/06/11 职场文书
纪委立案决定书
2015/06/24 职场文书
python基于scrapy爬取京东笔记本电脑数据并进行简单处理和分析
2021/04/14 Python
react中props 的使用及进行限制的方法
2021/04/28 Javascript
带你学习MySQL执行计划
2021/05/31 MySQL
使用python创建股票的时间序列可视化分析
2022/03/03 Python
vue2的 router在使用过程中遇到的一些问题
2022/04/13 Vue.js