日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

          歡迎訪問 生活随笔!

          生活随笔

          當(dāng)前位置: 首頁 > 编程语言 > php >内容正文

          php

          敏感词过滤的php代码,PHP敏感词过滤

          發(fā)布時(shí)間:2024/9/27 php 24 豆豆
          生活随笔 收集整理的這篇文章主要介紹了 敏感词过滤的php代码,PHP敏感词过滤 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

          /**

          * 禁詞過濾

          * 執(zhí)行效率:每篇用時(shí)0.05秒

          * @author liuxu

          *

          */

          class Logic_BlackWord

          {

          const APP_FORUM = 1;

          const APP_BLOG? = 2;

          const APP_VOTE? = 3;

          /**

          * 過濾得到禁詞

          * @param unknown $txt

          * @return Ambigous

          */

          public function getHitList($txt)

          {

          $hitList = array();

          //對(duì)禁詞分批過濾

          $max = $this->getMax();

          if($max)

          {

          $size = 1000;

          $last = ceil($max/$size);

          for($page=1;$page<=$last;$page++)

          {

          $result = $this->getHitListByPage($txt,$page,$size);

          if($result) $hitList = array_merge($hitList,$result);

          }

          }

          $hitList2 = array();

          foreach($hitList as $hit=>$type)

          {

          $hitList2[$type][] = $hit;

          }

          return $hitList2;

          }

          private function getMax()

          {

          $redis = Rds::factory();

          $memKey = 'blackWord_max';

          $max = $redis->get($memKey);

          if($max===false)

          {

          $max = 0;

          $blackWord = new Model_BlackWord_BlackWord();

          $para['field'] = "MAX(id) AS max";

          $result = $blackWord->search($para);

          if(isset($result[0]['max'])) $max = $result[0]['max'];

          $redis->setex($memKey,300,$max);

          }

          return $max;

          }

          /**

          * 分批過濾得到禁詞

          * @param unknown $txt

          * @param number $page

          * @param number $size

          * @return multitype:Ambigous

          */

          private function getHitListByPage($txt,$page=1,$size=1000)

          {

          $hitList = array();

          //分批得到禁詞樹

          $wordTree = $this->getWordTreeByPage($page,$size);

          $txt = strip_tags($txt);

          $txt = preg_replace('/[^a-zA-Z0-9\\x{4e00}-\\x{9fa5}]/iu','',$txt);

          $len = mb_strlen($txt,'UTF-8');

          for($i=0;$i

          {

          $char = mb_substr($txt,$i,1,'UTF-8');

          if(isset($wordTree[$char]))

          {

          $result = $this->getHitListByTree(mb_substr($txt,$i,50,'UTF-8'),$wordTree);

          if($result)

          {

          foreach($result as $hit=>$type)

          {

          $hitList[$hit] = $type;

          }

          }

          }

          }

          return $hitList;

          }

          /**

          * 是否禁詞

          * @param str $txt

          * @param arr $wordTree

          * @return multitype:unknown

          */

          private function getHitListByTree($txt,&$wordTree)

          {

          $len = mb_strlen($txt,'UTF-8');

          $point = & $wordTree;

          $hit = '';

          $hitList = array();

          for($i=0;$i

          {

          $char = mb_substr($txt,$i,1,'UTF-8');

          if(isset($point[$char]))

          {

          $hit .= $char;

          $point = & $point[$char];

          if(isset($point['type']))//匹配成功

          {

          $hitList[$hit] = $point['type'];

          }

          }

          else

          {

          break;

          }

          }

          return $hitList;

          }

          /**

          * 分批得到禁詞樹

          * @param int $page

          * @param int $size

          * @return arr:

          */

          private function getWordTreeByPage($page=1,$size=1000)

          {

          $redis = Rds::factory();

          $memKey = 'blackWord_tree_'.$page.'_'.$size;

          $wordTree = $redis->get($memKey);

          if($wordTree===false)

          {

          $wordTree = array();

          $blackWord = new Model_BlackWord_BlackWord();

          $start = ($page-1)*$size;

          $end = $start + $size;

          $para['where'] = "status=1 AND id>".$start." AND id<=".$end;

          $result = $blackWord->search($para);

          if($result)

          {

          foreach($result as $value)

          {

          if($value['word'])

          {

          $value['word'] = preg_split('/(?

          $point = & $wordTree;

          foreach($value['word'] as $char)

          {

          $point = & $point[$char];

          }

          $point['type'] = $value['type'];

          }

          }

          }

          $redis->setex($memKey,300,$wordTree);

          }

          return $wordTree;

          }

          }

          總結(jié)

          以上是生活随笔為你收集整理的敏感词过滤的php代码,PHP敏感词过滤的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

          如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。