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 相关文章推荐
如何给phpcms v9增加类似于phpcms 2008中的关键词表
Jul 01 PHP
php strrpos()与strripos()函数
Aug 31 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
Nov 12 PHP
一个严格的PHP Session会话超时时间设置方法
Jun 10 PHP
CodeIgniter框架数据库事务处理的设计缺陷和解决方案
Jul 25 PHP
Laravel框架学习笔记(一)环境搭建
Oct 15 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
php获取当前页面完整URL地址
Dec 30 PHP
PHP实现广度优先搜索算法(BFS,Broad First Search)详解
Sep 16 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
php微信开发之音乐回复功能
Jun 14 PHP
PHP getNamespaces()函数讲解
Feb 03 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
LotusPhp笔记之:Logger组件的使用方法
2013/05/06 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
JavaScript 面向对象的之私有成员和公开成员
2010/05/04 Javascript
用js获取电脑信息(是使用与IE浏览器)
2013/01/15 Javascript
JS继承用法实例分析
2015/02/05 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
Javascript iframe交互并兼容各种浏览器的解决方法
2016/07/12 Javascript
详解如何在Vue2中实现组件props双向绑定
2017/03/29 Javascript
详解vue模拟加载更多功能(数据追加)
2017/06/23 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
ES6中字符串string常用的新增方法小结
2017/11/07 Javascript
React从react-router路由上做登陆验证控制的方法
2018/05/10 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
vue实现百度下拉列表交互操作示例
2019/03/12 Javascript
python文件和目录操作函数小结
2014/07/11 Python
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
基于Python函数的作用域规则和闭包(详解)
2017/11/29 Python
Django添加KindEditor富文本编辑器的使用
2018/10/24 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
Python中用pyinstaller打包时的图标问题及解决方法
2020/02/17 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
keras 简单 lstm实例(基于one-hot编码)
2020/07/02 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
Deux par Deux官方网站:设计师童装
2020/01/03 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
什么是ARP(Address Resolution Protocol)地址解析协议
2013/10/31 面试题
电子专业推荐信范文
2013/11/18 职场文书
建筑个人求职信范文
2014/01/25 职场文书
通用自荐信范文
2014/03/14 职场文书
项目转让协议书
2014/10/27 职场文书
2015教师节师德演讲稿
2015/03/19 职场文书
户外拓展训练感想
2015/08/07 职场文书