您的位置:首页 > 编程语言 > PHP开发

php实现敏感词过滤

2012-10-30 12:19 615 查看
中国特色的网络环境必须考虑敏感词的问题,本人最近在工作中在实现一个论坛的发帖模块的时候也遇到了这个问题。本来想通过原生的正则表达式来处理,但是考虑到php本身的正则函数已经能够很好的做到了,则自己尝试利于它实现了一个敏感词过滤的封装。主要思想是将文本中的敏感词替换为‘*’。

首先得有个文本文件,用于替换规则,每行是一个替换规则:

名称为filter.txt,其规则为将文本中等号左边的字符串替换为右边的字符串

filter.txt

[plain]
view plaincopyprint?

敏感词=***  
过滤=***  
...  

敏感词=***
过滤=***
...


[php]
view plaincopyprint?

<?php  
/** 
 *   文本中的非法字符过滤类  
 */  
class Filter{  
    private $pattern;  
    private $replacement;  
    /** 
     * 构造函数,进行初始化工作,加载替换规则,并构造用于模式查找和模式替换的两个数组 
     */  
    public function __construct(){  
        $f= fopen("filter.txt","r");  
        if(!$f){  
            die("open filter file failed!");  
        }  
        while (!feof($f))  
        {  
            $line = fgets($f);//从过滤规则文件中读取一行记录  
            $patternandreplace = explode('=', $line); //用等号分割,前面的用作模式串,后面的用作替换串  
            $this->pattern[] = '/'.$patternandreplace[0].'/';  
            $this->replacement[] = trim($patternandreplace[1]);  
        }  
        fclose($f);  
          
    }  
    /** 
     * 去除$source中的敏感字符,用*替换 
     * @param unknown_type $source 
     */  
    public function clean($source){  
        return preg_replace($this->pattern,$this->replacement,$source);  
    }  
};  

用法为实例化一个Filter对象,然后调用clean方法即可。
希望可以帮到大家。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: