关注互联网、IT技术!

PHP实现网站关键字过滤

  •  admin
  •  2011-09-29 10:09:40
  •     
给网站加了个简单的论坛,为了避免不必要的麻烦,我觉得有必要在发帖的时候,添加一个关键字过滤的功能。于是在网上找来了一个php写的类,写的不错,收藏了。
<?php
    /**
    *@name class.fillter.php
    *@abstract 过滤器,按关键字过滤
    */
class fillter{
   private $keyword_file;
   private $dict;
   public $result;
   public function __construct($file){
    if(!is_file($file)){
     trigger_error("$file not exists!");
    }
    $this->keyword_file=$file;
   }
   public function fill($resource){
    $this->dict = $this->getDict();
    $len = strlen($resource);
    for($i=0; $i<$len; ++$i){
     $key=substr($resource,$i,2);
     if(array_key_exists($key,$this->dict)){
      $this->deal(substr($resource,$i,$this->dict[$key]['max']),$key,$af);
      $i+=$af;
     }
     else{
      $this->result .=substr($resource,$i,1);
     }
    }
    return $this->result;
   }
   /*
   **匹配到了关键字时的处理
   **$res 源字符串
   **$keywords 关键字数组
   */
   public function deal($res,$key,&$af){
    $af=0;
    foreach($this->dict[$key]['list'] as $keyword){
     if(strpos($res,$keyword) !==false){
      $len=strlen($keyword);
      $af=$len-1;
      $this->result .=str_repeat("*",$len);
      return;
     }
    }
     $this->result .= substr($res,0,1);
   }
   /*
   **获取关键字列表
   */
   private function getKeyWordList(){
    $keywords = file_get_contents($this->keyword_file);
    return array_unique(explode("\r\n",$keywords));
   }
   public function getDict(){
    $keywords=$this->getKeyWordList();
    $dict=array();
    foreach($keywords as $keyword){
     if(empty($keyword)){
      continue;
     }
     $key = substr($keyword,0,2);
     $dict[$key]['list'][]=$keyword;
     $dict[$key]['max']=max($dict[$key]['max'],strlen($keyword));
    }
    return $dict;
   }
}
//测试用demo 结果比直接用正则提高了3倍效率
$res = $text = file_get_contents("test.txt");
$t1 = microtime(true);
$fil = new fillter("banwords.txt");
$res = $fil->fill($text);
//$res = $fil->getDict();
//$keywords = explode("\r\n",file_get_contents("banwords.txt"));
//foreach($keywords as $keyword){
// if(empty($keyword)){
//   continue;
// }
// $res = preg_replace("/$keyword/","***",$res);
//}
$t2 = microtime(true);
echo $t2-$t1;
echo $text,"<br/>";
echo "<pre>";
print_r( $res);
echo "</pre>";
?>

相关文章

评论

称呼(可以不填)
Email(可以不填)
链接(可以不填)
请输入评论内容*