Zend_Filter组件中已经定义了很多常用的过滤器。但是这满足不了我们的编程环境需要,比如有人在你的系统中写一些色情暴力不干净的语句,什么“操你妈了”,“草拟大爷草拟妹”什么的。没关系,Zend_Filter还支持自定义过滤器哦亲~!这节就让我们一起学习自定义过滤器吧。
要编写自定义过滤器,需要自己定义一个类,并引用Zend_Filter_Interface接口。该接口定义了filter()方法,该方法可以在用户的类里被实现。使用Zend_Filter::addFilter()方法可以把一个实现该接口的对象添加到过滤器中(这是书上的句子,能看懂看,看不懂也没关系,估计是ZF的版本问题这句话应该有所修改。下边例子可以证实此书已经out了~!)。
下边给大家举个例子吧:
public function zdyjgAction()
{
$temp1="操你妈的,操你大爷的,操你妹的!!!"; //看到没,多么蛋疼的话啊。。。
echo $temp1;
echo "<p>";
$filter=new Application_Model_MyFilter(); //此处使用自定义类创建一个对象
echo $filter->filter($temp1); //调用类中的自定义过滤方法
}
这是控制器中的一个方法,调用了自定义类。然后在你的modles文件夹里边创建文件MyFilter.php文件,文件内容为:
<?php
//require_once 'Zend/Filter/Interface.php'; //我用的这个版本不写这句话貌似也可以哦亲 ,我是可以不知道你们写不写行不行。。。。。
class Application_Model_MyFilter implements Zend_Filter_Interface
{
public function filter($value)
{
$badlist=array("操你妈","操你妹","操你大爷"); //嘿嘿,把他们都过滤掉吧,当然你也可以写自己规则
for ($i=0;$i<count($badlist);$i++)
{
$value=str_replace($badlist[$i],"*", $value); //过滤指定的内容,将$value中的$badlist[$i]内容改为“*”。
}
return $value;
}
}
对于自定义过滤器也可以通过Zend_Filter的addFilter()方法将其添加到过滤链中去。
不解:
1.在测试过程中我一开始创建类时是这么写的 -class MyFilter implements Zend_Filter_Interface 这样写类不会被识别。挺蛋疼的吭。后来一哥们告诉我class Application_Model_MyFilter implements Zend_Filter_Interface这么个写法,就是类名不能直接那么写。。至于为什么,他说是没有配置多模块,具体配置多模块他也不会,碰钉子了呵呵!下边我会找些相关的知识研究一下什么配置多模块和大家分享,或者找些好文章。。
2.可能是版本问题吧,以前调用方法应该这么写:
{
$filter->addFilter(new MyFilter());
$filter->filter($temp1);
$filter=new Application_Model_MyFilter(); //此处使用自定义类创建一个对象
echo $filter->filter($temp1); //调用类中的自定义过滤方法
会当凌绝顶,一览众山小。(杜甫)