中国特色的网络环境必须考虑敏感词的问题,本人最近在工作中在实现一个论坛的发帖模块的时候也遇到了这个问题。本来想通过原生的正则表达式来处理,但是考虑到php本身的正则函数已经能够很好的做到了,则自己尝试利于它实现了一个敏感词过滤的封装。主要思想是将文本中的敏感词替换为‘*’。
首先得有个文本文件,用于替换规则,每行是一个替换规则:
名称为filter.txt,其规则为将文本中等号左边的字符串替换为右边的字符串
filter.txt
- 敏感词=***
- 过滤=***
- ...
敏感词=***
过滤=***
...
- <?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);
- }
- };
希望可以帮到大家。