久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合

站長資訊網
最全最豐富的資訊網站

PHP實現非法詞匯過濾(算法分析)

算法簡介

將關鍵詞構造成一顆樹,每個字都是一個節點。

遍歷需要過濾的語句,將語句的每個字都去樹中查找,看看是否存在。

實現難點

構造一棵樹簡單,關鍵點是php中遍歷字符串需要自己正確的得到單個字符的長度。
簡單遍歷字符串的方法如下:

$strLen = mb_strlen($str); for ($i = 0; $i < $strLen; $i++) {     echo mb_substr($str, $i, 1, "utf8"),PHP_EOL; }
登錄后復制

該方法是利用mb_*系列函數來正確截取每個字符,處理大量字符串時速度非常慢,我猜測是:mb_substr每截取一個字符,都要計算該字符串之前,有多少個字符。
正確的遍歷字符串的方式是按utf8的編碼規律來截取字符串,具體請看下文。

算法實現

<?php /**  * 非法關鍵詞檢查  */ class SensitiveWords {     protected $tree = null;     protected $callIsNumeric = true;     /**      * 非法詞匯列表,一個非法詞匯占用一行      */     public function __construct($path = __DIR__ . '/sensitiveWords.txt')     {         $this->tree = new WordNode();         $file = fopen($path, "r");         while (!feof($file)) {             $words = trim(fgets($file));             if ($words == '') {                 continue;             }             //存在純數字的非法詞匯             if (is_numeric($words)) {                 $this->callIsNumeric = false;             }             $this->setTree($words);         }         fclose($file);     }      protected function setTree($words)     {         $array = $this->strToArr($words);         $tree = $this->tree;         $l = count($array) - 1;         foreach ($array as $k => $item) {             $tree = $tree->getChildAlways($item);             if ($l == $k) {                 $tree->end = true;             }         }     }      /**      * 返回包含的非法詞匯      * @param string $str      * @return array      */     public function check($str)     {         //先壓縮字符串         $str = trim(str_replace([' ', "n", "r"], ['', '', ''], $str));         $ret = [];         loop:         $strLen = strlen($str);         if ($strLen === 0) {             return array_unique($ret);         }         //非法詞匯中沒有純數字的非法詞匯,待檢測字符串又是純數字的,則跳過不再檢查         if ($this->callIsNumeric && is_numeric($str)) {             return array_unique($ret);         }         //挨個字符進行判斷         $tree = $this->tree;         $words = '';         for ($i = 0; $i < $strLen; $i++) {             //unicode范圍 --> ord 范圍             //一字節 0-127 --> 0 - 127             //二字節 128-2047 --> 194 - 223             //三字節 2048-65535 --> 224 - 239             //四字節 65536-1114111 --> 240 - 244             //@see http://shouce.jb51.net/gopl-zh/ch3/ch3-05.html             $ord = ord($str[$i]);             if ($ord <= 127) {                 $word = $str[$i];             } elseif ($ord <= 223) {                 $word = $str[$i] . $str[$i + 1];                 $i += 1;             } elseif ($ord <= 239) {                 $word = $str[$i] . $str[$i + 1] . $str[$i + 2];                 $i += 2;             } elseif ($ord <= 244) {                 //四字節                 $word = $str[$i] . $str[$i + 1] . $str[$i + 2] . $str[$i + 3];                 $i += 3;             } else {                 //五字節php都溢出了                 //Parse error: Invalid UTF-8 codepoint escape sequence: Codepoint too large                 continue;             }             //判斷當前字符             $tree = $tree->getChild($word);             if (is_null($tree)) {                 //當前字不存在,則截取后再次循環                 $str = substr($str, $i + 1);                 goto loop;             } else {                 $words .= $word;                 if ($tree->end) {                     $ret[] = $words;                 }             }         }         return array_unique($ret);     }      protected function strToArr($str)     {         $array = [];         $strLen = mb_strlen($str);         for ($i = 0; $i < $strLen; $i++) {             $array[] = mb_substr($str, $i, 1, "utf8");         }         return $array;     } } /**  * 單個字符的節點  */ class WordNode {     //是否為非法詞匯末級節點     public $end = false;     //子節點     protected $child = [];      /**      * @param string $word      * @return WordNode      */     public function getChildAlways($word)     {         if (!isset($this->child[$word])) {             $this->child[$word] = new self();         }         return $this->child[$word];     }      /**      * @param string $word      * @return WordNode|null      */     public function getChild($word)     {         if ($word === '') {             return null;         }         if (isset($this->child[$word])) {             return $this->child[$word];         }         return null;     } }
登錄后復制

推薦學習:《PHP視頻教程》

php入門到就業線上直播課:立即學習
全程直播 + 實戰授課 + 邊學 + 邊練 + 邊輔導

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
麻豆一区二区三| 欧美粗暴jizz性欧美20| 在线一区欧美| 日本精品不卡| 都市激情国产精品| 美女视频网站久久| 免费看一区二区三区| 精品无人区麻豆乱码久久久 | 亚洲爱爱视频| 1024精品一区二区三区| 久久精品91| 久久成人一区| 欧美另类中文字幕| 国产精品久久久一区二区| 大香伊人久久精品一区二区| 久久三级视频| 亚洲精品高潮| 麻豆成人av在线| 丝袜美腿一区| 蜜臀国产一区二区三区在线播放| 奇米色欧美一区二区三区| 国产精品www.| 黑森林国产精品av| av成人国产| 国产欧美日韩一区二区三区四区| 久久男人av| 亚洲成人不卡| 蜜桃视频一区二区| 国产乱码精品一区二区亚洲| 超碰在线99| 国产毛片一区| 国产精品夜夜夜| 久久久久久久久丰满| 视频一区二区中文字幕| 日本中文字幕一区二区视频| 精品视频自拍| 伊人久久大香线蕉av超碰演员| 综合在线一区| 国产精品久久久久久久免费观看 | 国产亚洲人成a在线v网站| 国产91久久精品一区二区| 国产精品九九| 亚洲精品第一| 一区三区视频| 亚洲成人va| 精品国产黄a∨片高清在线| 最新亚洲国产| 亚洲激情二区| 三级精品视频| 美女高潮久久久| 亚洲免费观看高清完整版在线观| 在线天堂中文资源最新版| 欧美日韩在线精品一区二区三区激情综合 | 国产一区日韩一区| 精品一区二区三区中文字幕| 日韩动漫一区| 亚洲一区二区小说| 极品裸体白嫩激情啪啪国产精品| 精品视频99| 国产女人18毛片水真多18精品| 亚洲人成亚洲精品| 亚洲欧美日韩一区在线观看| 亚洲成人va| 中文一区一区三区高中清不卡免费| 日韩精品福利一区二区三区| 乱人伦精品视频在线观看| 婷婷色综合网| 免费精品国产的网站免费观看| xxxxx性欧美特大| 美女久久99| 国产精品一区二区三区av麻| 日韩精品欧美成人高清一区二区| 亚洲一区国产| 国产精品日韩久久久| 在线观看免费一区二区| 91tv亚洲精品香蕉国产一区| 国产精品99一区二区三区| 欧美激情在线精品一区二区三区| 欧美精品三级在线| 日韩精品视频在线看| 亚洲精品裸体| 日精品一区二区三区| 亚洲免费专区| 日本亚洲视频在线| 中文字幕日韩欧美精品高清在线| 国产精品日韩| 免费在线成人网| 亚洲综合激情在线| 日本在线成人| 国产日产精品_国产精品毛片| 欧美一级二级三级视频| 日本欧美韩国一区三区| 日韩不卡手机在线v区| 日韩激情啪啪| 日本少妇精品亚洲第一区| 国产亚洲一卡2卡3卡4卡新区| 欧美日韩亚洲一区| 麻豆久久久久久| 国产一区二区三区不卡av| 美女av在线免费看| 99tv成人| aa国产精品| 日韩欧美中文在线观看| 日韩1区2区3区| 欧美亚洲网站| 欧美成a人片免费观看久久五月天| 欧美成人精品午夜一区二区| 精品国产aⅴ| 日韩一区二区中文| 亚洲第一区色| 蜜臀精品久久久久久蜜臀| 亚洲精品日本| 国产精品亚洲欧美一级在线| 国产成人精品一区二区免费看京| 成人啊v在线| 老牛影视一区二区三区| 日日夜夜免费精品视频| 国产精品对白| 久久久精品日韩| 亚洲专区一区| 国产美女久久| 伊人久久高清| 中文字幕亚洲影视| 美女尤物国产一区| av高清一区| 蜜桃久久久久久久| 国产精品探花在线观看| 成人片免费看| 亚洲欧美日韩国产一区| 国产欧美三级| 亚洲91视频| 日韩一区精品| bbw在线视频| 国产精品美女| 国产精品4hu.www| 日韩在线中文| 亚洲影院天堂中文av色| 久久中文字幕导航| 99热精品在线| 国产日韩欧美在线播放不卡| 日韩欧美二区| 日韩在线黄色| 日韩精品永久网址| 亚洲人成网77777色在线播放| 风间由美中文字幕在线看视频国产欧美| 亚洲天堂黄色| 国产日韩欧美一区| 亚洲二区在线| 国产日产精品_国产精品毛片| 三上悠亚国产精品一区二区三区| 亚洲精品黄色| 视频福利一区| 国产欧美一区二区精品久久久 | 久久香蕉精品香蕉| 91精品蜜臀一区二区三区在线| 极品日韩av| 日本久久一区| 福利精品一区| 在线亚洲自拍| 国产激情精品一区二区三区| 久久久久久免费视频| 亚洲精品伊人| 国产日韩电影| 日韩精品一卡二卡三卡四卡无卡| 国产精品xvideos88| 91精品国产调教在线观看| 麻豆亚洲精品| 久久中文欧美| 欧美综合国产| 麻豆91精品视频| 欧美日韩三区| 国产精品男女| 国产高清一区二区| 久久av资源| 免费日韩av片| 国产aⅴ精品一区二区四区| 免费久久99精品国产自在现线| 国产精品流白浆在线观看| 久久伦理在线| 国产日韩一区二区三区在线| 91精品久久久久久久久久不卡| 中文一区一区三区免费在线观| 免费在线成人| 蜜臀av一区二区在线免费观看| 国产一区二区色噜噜| 伊人www22综合色| 亚洲天堂av影院| 91综合久久爱com| 久久久久午夜电影| 国产精品v日韩精品v欧美精品网站| 婷婷综合网站| 国产成人久久精品一区二区三区| 夜久久久久久| 国产+成+人+亚洲欧洲在线| 国产一区导航| 丁香婷婷久久| 久久国产麻豆精品| 亚洲精品一级| 视频在线观看一区二区三区| 久久在线视频免费观看|