PHP 超强过滤函数

你有每次要过滤的时候总是去翻曾经的过滤代码的时候么?

你有搜索过怎样防过滤,防攻击的PHP解决方法么?

你有对全然遵循'过滤输入,避免输出',Web界经典说辞么?

    事实上这些问题,就是须要我们时常的过滤掉输入的数据,那么,依据写了这么多代码的经验来看,过滤白名单方式比較靠谱!

当然,你有什么更好的代码什么的,欢迎留言讨论!

发现近期总是在写过滤的一些问题,也写了一两年PHP了,发现过滤问题一直是个大问题,不才,以下整理出来了一个通用的基于白名单的过滤函数,

假设发现你那里用不了,联系我的qq852208555,一起探讨吧!

    GBK GB2312 编码的实现       

<?php
//白名单过滤模式開始
$a='爱乐sdsadDDA22313\'@';
echo AlFilter($a,'CWD_','@\'');
/*过滤类分为几种类型
* $str(待过滤字符串),$operate(操作码),$ext(白名单扩展)
* 操作码简写(不分大写和小写):1.汉字C 2.数字D 3.字母W 4.特殊符号T 5.下划线_
经典的调用模式:
仅仅同意数字:AlFilter($a,'D')
仅仅同意汉字:AlFilter($a,'C')
仅仅同意字母数组汉字:AlFilter($a,'CWD')
同意字母数字汉字下划线特殊字符:AlFilter($a,'CWD_T') 扩展模式:AlFilter($a,'CWD_T','@')
AlFilter($a,'CWD_','@');//同意特殊字符 @
AlFilter($a,'CWD_','@\'');//同意特殊字符 @ '(加了反斜杠转义)
*/
function AlFilter($str=NULL,$operate,$ext=NULL){
$str =  trim(str_replace(PHP_EOL, '', $str));//去换行机制
if(!$str) return 0;
//匹配模式 $pattern
$Cp="".chr(0xa1)."-".chr(0xff)."";
$Dp='0-9';
$Wp='a-zA-Z';
$Tp='@#$%^&*()-+=';
$_p='_'; $pattern="/^[";
$OArr=str_split(strtolower($operate));//拆分操作符
if (in_array('c', $OArr)) $pattern.=$Cp;
if (in_array('d', $OArr)) $pattern.=$Dp;
if (in_array('w', $OArr)) $pattern.=$Wp;
if (in_array('t', $OArr)) $pattern.=$Tp;
if (in_array('_', $OArr)) $pattern.=$_p;
if($ext) $pattern.=$ext;
$pattern.="]+$/";
if(!preg_match($pattern,$str))
return 0;
else
return $str; }

以下是UTF-8的模式:(主要是汉字匹配不同)

AlFilter($str=NULL,$operate,$ext=NULL){
$str = trim(str_replace(PHP_EOL, '', $str));//去换行机制
if(!$str) return 0;
//匹配模式 $pattern
$Cp="\x{4e00}-\x{9fff}";
$Dp='0-9';
$Wp='a-zA-Z';
$Tp='@#$%^&*()-+=';
$_p='_'; $pattern="/^[";
$OArr=str_split(strtolower($operate));//拆分操作符
if (in_array('c', $OArr)) $pattern.=$Cp;
if (in_array('d', $OArr)) $pattern.=$Dp;
if (in_array('w', $OArr)) $pattern.=$Wp;
if (in_array('t', $OArr)) $pattern.=$Tp;
if (in_array('_', $OArr)) $pattern.=$_p;
if($ext) $pattern.=$ext;
$pattern.="]+$/u";
if(!preg_match($pattern,$str))
return 0;
else
return $str; }

当然也能够仅仅用UTF-8 GBK的转码过去匹配...反之亦然,只是我认为麻烦当然有什么更好地改进办法,欢迎大家讨论,指教!

转载说明来自 爱乐爱快乐 我的博客地址:http://blog.csdn.net/lovehappying本文地址http://blog.csdn.net/lovehappying/article/details/24180003

PHP 超强过滤函数的更多相关文章

  1. Filter 数组过滤函数精解示例

    '************************************************************************* '**模 块 名:Filter 数组过滤函数精解示 ...

  2. php 安全过滤函数代码

    php 安全过滤函数代码,防止用户恶意输入内容. //安全过滤输入[jb] function check_str($string, $isurl = false) { $string = preg_r ...

  3. php数据过滤函数与方法示例【转载】

    1.php提交数据过滤的基本原则 1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了.其实在涉及到变量取值时,intval( ...

  4. SSDTHook实例--编写稳定的Hook过滤函数

    解说怎样写Hook过滤函数,比方NewZwOpenProcess.打开进程. 非常多游戏保护都会对这个函数进行Hook. 因为我们没有游戏保护的代码,无法得知游戏公司是怎样编写这个过滤函数. 我看到非 ...

  5. 过滤函数 filter

    filter(lambda x:x.endswith('居'),house_type_list) 过滤函数,作用就是将“以‘居’结尾的字段都过滤出来,其它的字段都删除掉.”

  6. 匿名函数lambda,过滤函数filter,映射类型map

    匿名函数lambda, 作用是不用定义函数,用完之后会自动被删掉,在使用执行脚本的时候,使用lambda就可以省下定义函数的过程,简化代码的可读性. 格式是 例子g=lambda x,y:x+y g( ...

  7. PHP:第五章——字符串过滤函数

    <?php header("Content-Type:text/html;charset=utf-8"); //字符串过滤函数: //1.n12br 在所有新行之前插入Htm ...

  8. weex 项目开发(五)自定义 过滤函数 和 混合 及 自定义 Header 组件

    1.自定义  过滤函数 src / filters / index.js /** * 自定义 过滤函数 */ export function host (url) { if (!url) return ...

  9. PHP反序列化中过滤函数使用不当导致的对象注入

    1.漏洞产生的原因 ####  正常的反序列化语句是这样的 $a='a:2:{s:8:"username";s:7:"dimpl3s";s:8:"pa ...

随机推荐

  1. STS(Spring Tool Suite)建立默认的spring mvc项目

    引入响应的jar包解决报错: 由于国内的网络限制,下载会较慢.使用之前可自行更换maven的镜像路径,越近越好.

  2. 多线程程序 怎样查看每个线程的cpu占用

    可以用下面的命令将 cpu 占用率高的线程找出来: ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu 这个命令首先指定参数'H',显示线程相关的 ...

  3. C++入门学习——标准模板库之vector

    vector(向量容器),是 C++ 中十分实用一个容器.vector 之所以被觉得是一个容器,是由于它可以像容器一样存放各种类型的对象,简单地说,vector 是一个可以存放随意类型(类型可以是in ...

  4. U盘制作Linux系统盘

    一.首先需要有一个U盘,最好能是8G及以上的 二.下载Linux的镜像文件(我这边安装的是red hat6.3) 下载路径:http://pan.baidu.com/s/1jIGYCKI 三.下载制作 ...

  5. java加载资源文件

    className.class.getResourceAsStream 用法: 第一: 要加载的文件和.class文件在同一目录下,例如:com.x.y 下有类Test.class ,同时有资源文件c ...

  6. iOS 面试题 2

    1.         描述应用程序的启动顺序. 1.程序入口main函数创建UIApplication实例和UIApplication代理实例 2.在UIApplication代理实例中重写启动方法, ...

  7. 批量数据上传的sql.xml

    <!-- User.xml --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE ...

  8. 解决Eclipse编译器报错ClassNotFoundException:Org.hibernate.hql.ast.HqlToken

    最近开发遇到Eclipse编译器老是报出ClassNotFoundException:Org.hibernate.hql.ast.HqlToken [from User Where id=1] 的错误 ...

  9. JQuery中的省市联动

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  10. 阿里巴巴集团2013实习生招聘技术类笔试题(B)

    一.单向选择题 1.在常用的网络协议中,___B__是面向连接的.有重传功能的协议. A. IP B. TCP C. UDP D. DXP 2.500张骨牌整齐地排成一行,按顺序编号为1.2.3... ...