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.****.net/lovehappying本文地址http://blog.****.net/lovehappying/article/details/24180003