php提交函数过滤,PHP 超强过滤函数

PHP 超强过滤函数

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

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

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

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

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

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

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

GBK GB2312 编码的实现

//白名单过滤模式开始

$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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值