首先假设我们有个form表单,并且以POST的类型把数据提交到服务器,比如接收form表单数据的PHP页面
if(is_array($_POST)&&count($_POST)>0)
{
if((isset($_POST[“user”])&&!empty($_POST[“user”]))&&(isset($_POST[“password”])&&!empty($_POST[“password”])))
{
$i=$_POST[“user”];$o=$_POST[“password”]; //我们假设POST过来user和password两个参数,然后下面是作者写的小函数,可以在接收有POST的数据上增加
/***************调用开始*******************/
$login=array($i,$o,);//把POST的数据数组化,你有多少POST的数据要过滤就增加多少个.
require_once(“filtration.php”); //包含过滤文件
$filtration->filtration($login); //调用过滤函数,并且把数组传递给filtration的数组参数.
/***************调用结束*******************/
echo “无过滤字符号,成功登陆”; //过滤之后的响应方法
}
else
{
echo “请完整输出”;exit;
}
}
让我们来看看filtration.php的文件:
<?php
header(“Content-Type:text/html;charset=utf-8”);
error_reporting( E_ALL&~E_NOTICE ); //除去 E_NOTICE 之外的所有错误信息
class Filtration
{
private $str=array();//私有数组成员,用于接收POST的数组
function filtration($arrayfiltration=array()) //过滤函数,带一个数组变量$arrayfiltration,
{
$this->str=$arrayfiltration; //函数的$arrayfiltration数组接收POST的数组传值给私有数组$str
$str1=array(
‘过滤1′,’过滤2’,
‘过滤3′,’过滤4’,
‘过滤5′); //需要过滤的数值
$arraystr=count($this->str); //判断POST过来的数组有多少个元素
for($o=0;$o<$arraystr;$o++) //根据POST过来的数组数量进行循环判断
{
for($i=0;$i<count($str1);$i++) //根据预定义的过滤数组进行循环
{
$j=substr_count($this->str[$o],$str1[$i]); //根据POST的数组元素数量执行$this->str和预定义的过滤数组$str1
/*
这比等于for一次循环是根据POST的元素数量来执行,POST多少个执行多少次
然后$o++表示执行的次数字+1,一直到等于POST的元素数量的时候中指。
然后,每执行一次$this->str[$o],调用一次POST过来的数组的数据,然后在进行for二次循环
对定义的过滤数组循环判断。直到所有的过滤数组都完成,跳出for二次循环
在判断一次循环的for条件(即POST的数组数量是否达),如果还有次数,对POST过来的数组的其他元素
以+1的方式,再一次进行二次for循环。直到一次循环完成。
*/
if($j>0) //只要有一条如果条件为真
{
echo “出现非法字符”;exit; //中止脚本。
}
}
}
}
}
$filtration=new Filtration(); //实例化对象。
?>
如果是用文件来过滤的话: 新增一个文件filtration.txt,写入要过滤的内容,以行为单位,然后PHP修改为:
<?php
header(“Content-Type:text/html;charset=utf-8”);
error_reporting( E_ALL&~E_NOTICE ); //除去 E_NOTICE 之外的所有错误信息
class Filtration
{
private $str=array();//私有数组成员,用于接收POST的数组
function filtration($arrayfiltration=array()) //过滤函数,带一个数组变量$arrayfiltration,
{
$this->str=$arrayfiltration; //函数的$arrayfiltration数组接收POST的数组传值给私有数组$str
$file=’filtration.txt’;//过滤文件
$openfile=file_get_contents($file); //执行打开文件并读入到字符串
$str1=explode(“\r\n”,$openfile); //获取数组”\r\n”表示是换行
$arraystr=count($this->str); //判断POST过来的数组有多少个元素
for($o=0;$o<$arraystr;$o++) //根据POST过来的数组数量进行循环判断
{
for($i=0;$i<count($str1);$i++) //根据预定义的过滤数组进行循环
{
$j=substr_count($this->str[$o],$str1[$i]); //根据POST的数组元素数量执行$this->str和预定义的过滤数组$str1
if($j>0) //只要有一条如果条件为真
{
echo “出现非法字符”;exit; //中止脚本。
}
}
}
}
}
$filtration=new Filtration(); //实例化对象。
?>
如果是从文本读入,第一行请留空,否则第一行是无法过滤的.
如果是MYSQL里存放过滤数据的话,一样循环读入到数组
并且修改$str1的值=mysql里获取的数组数据.就可以进行判断了.
关于作者