久久精品五月,日韩不卡视频在线观看,国产精品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综合
亚洲成人二区| 综合一区二区三区| 国产伦理一区| 国产欧美一区二区精品久久久 | 视频一区欧美日韩| 性一交一乱一区二区洋洋av| 一区二区不卡| 国产毛片一区二区三区| 国产一区二区精品久| 欧美日一区二区| 中文字幕一区二区三区在线视频| 四虎国产精品免费久久| 你懂的国产精品永久在线| 97精品一区二区| 午夜国产精品视频| 丝袜a∨在线一区二区三区不卡| 日韩欧美中文字幕在线视频| 久久影视三级福利片| 群体交乱之放荡娇妻一区二区| 日韩一级网站| 国产精品第一国产精品| 日韩欧美一区二区三区在线视频 | 国产精品高潮呻吟久久久久| 日韩电影免费网址| 综合干狼人综合首页| 久久麻豆视频| 一级欧洲+日本+国产| 国产亚洲一区二区三区啪| 国产一区二区三区探花| 午夜久久免费观看| 国产精品亚洲片在线播放| 日韩一区二区三区免费| 亚洲tv在线| 神马久久午夜| 亚洲精品系列| 色网在线免费观看| 日韩视频1区| 日韩精品免费一区二区在线观看 | 国产亚洲一区二区三区啪| 丝袜美腿诱惑一区二区三区| 久久亚洲一区| 国产一区不卡| 天海翼精品一区二区三区| 日韩欧美一区二区三区免费看| 欧美中文日韩| 日韩黄色大片网站| 国产欧美69| 9久re热视频在线精品| 精品视频在线你懂得| 麻豆精品91| 久久精品影视| 欧美精品不卡| 日韩精品欧美大片| 在线亚洲观看| 欧美日韩精品免费观看视欧美高清免费大片 | 亚洲三区欧美一区国产二区| 97在线精品| 国产精品亚洲综合久久| 蜜臀av一区二区在线免费观看| 黄色在线观看www| 国产精品亚洲人成在99www| 丝袜亚洲另类欧美| 久久在线免费| 日韩国产专区| 精品视频网站| 天堂成人国产精品一区| 92国产精品| 欧美激情福利| 欧美日韩一区自拍| 男人操女人的视频在线观看欧美| 日韩精品中文字幕第1页| 国产精品18| 日本不卡一区二区三区| 水蜜桃久久夜色精品一区的特点| 丝袜av一区| 高清久久精品| 国产专区精品| 久久91视频| 麻豆免费精品视频| 国产欧美三级| 日本成人中文字幕| 亚洲精品麻豆| 中文一区一区三区免费在线观 | 日韩午夜一区| 好吊一区二区三区| 亚洲高清影视| 欧美日韩国产一区二区三区不卡 | 欧美黄色精品| 国产精品美女久久久久久不卡 | 99国产精品视频免费观看一公开| 久久久久久美女精品| 三上亚洲一区二区| 高清一区二区三区| 色在线视频观看| 日韩免费小视频| 亚洲成人不卡| 女人av一区| 久久高清国产| 亚洲欧洲专区| 国产亚洲高清在线观看| 国产亚洲欧美日韩精品一区二区三区 | 国产一区三区在线播放| 精品入口麻豆88视频| 久久精品国产在热久久| 成人国产精品一区二区网站| 国产aa精品| 99精品视频在线观看免费播放| 欧美1区2区3区| 免费日韩视频| 欧美一区免费| 麻豆精品av| 日韩精品91| 伊人久久亚洲美女图片| 丝袜美腿成人在线| 日韩av在线播放中文字幕| 国产乱论精品| 在线看片国产福利你懂的| 日韩精品诱惑一区?区三区| 久久精品国产99久久| 一区在线免费观看| 日本一区福利在线| 麻豆免费精品视频| 日韩在线高清| 中文精品视频| 欧美精品影院| 神马午夜在线视频| 欧美va天堂| 日韩国产欧美视频| 高潮久久久久久久久久久久久久| 国产91精品对白在线播放| 久久午夜视频| 国产精品草草| 激情自拍一区| 欧美精品三级在线| 香蕉成人av| 亚久久调教视频| 97精品国产| 亚洲一级大片| 精品国产美女a久久9999| 欧美日韩免费观看一区=区三区| 日本不卡一区二区| 国产91欧美| 亚洲欧美日韩国产综合精品二区| 久久国产视频网| 国内精品福利| 欧美黑人做爰爽爽爽| 欧美天堂亚洲电影院在线观看| 国产日韩欧美| 狠狠干成人综合网| 麻豆精品在线观看| 日韩专区在线视频| 久久uomeier| 日韩欧美久久| 99免费精品| 国产精品久久久久久妇女| 久久国产小视频| 久久国产三级精品| 欧美一区=区| 香蕉视频亚洲一级| 国产精品香蕉| 蜜桃视频免费观看一区| 91av亚洲| 国产色99精品9i| 在线国产一区| 日韩在线不卡| 欧美国产亚洲精品| 亚洲欧洲免费| 婷婷亚洲五月| 日韩a一区二区| 日本色综合中文字幕| 一区在线视频观看| 成人午夜网址| 欧美久久精品| 亚洲精一区二区三区| 激情久久婷婷| 色偷偷偷在线视频播放| 国产三级精品三级在线观看国产| 99国产精品久久久久久久| 美女av在线免费看| 欧美激情三区| 欧美日韩一区二区三区四区在线观看 | 国产综合色产| 国产成人久久精品麻豆二区| 99综合视频| 久久精品影视| sm捆绑调教国产免费网站在线观看| 日韩高清电影一区| 99精品99| 欧美一区二区性| 久久久久久网| 精品国产亚洲一区二区三区大结局| 男人的天堂久久精品| 波多野结衣一区| 91精品国产91久久久久久黑人| 四虎国产精品免费观看| 国产精品久久久久久久久久齐齐| 亚洲美女91| 午夜亚洲福利| 视频一区日韩精品| 亚洲一区二区日韩|