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

站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

PHP實(shí)現(xiàn)非法詞匯過(guò)濾(算法分析)

算法簡(jiǎn)介

將關(guān)鍵詞構(gòu)造成一顆樹(shù),每個(gè)字都是一個(gè)節(jié)點(diǎn)。

遍歷需要過(guò)濾的語(yǔ)句,將語(yǔ)句的每個(gè)字都去樹(shù)中查找,看看是否存在。

實(shí)現(xiàn)難點(diǎn)

構(gòu)造一棵樹(shù)簡(jiǎn)單,關(guān)鍵點(diǎn)是php中遍歷字符串需要自己正確的得到單個(gè)字符的長(zhǎng)度。
簡(jiǎn)單遍歷字符串的方法如下:

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

該方法是利用mb_*系列函數(shù)來(lái)正確截取每個(gè)字符,處理大量字符串時(shí)速度非常慢,我猜測(cè)是:mb_substr每截取一個(gè)字符,都要計(jì)算該字符串之前,有多少個(gè)字符。
正確的遍歷字符串的方式是按utf8的編碼規(guī)律來(lái)截取字符串,具體請(qǐng)看下文。

算法實(shí)現(xiàn)

<?php /**  * 非法關(guān)鍵詞檢查  */ class SensitiveWords {     protected $tree = null;     protected $callIsNumeric = true;     /**      * 非法詞匯列表,一個(gè)非法詞匯占用一行      */     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;             }             //存在純數(shù)字的非法詞匯             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);         }         //非法詞匯中沒(méi)有純數(shù)字的非法詞匯,待檢測(cè)字符串又是純數(shù)字的,則跳過(guò)不再檢查         if ($this->callIsNumeric && is_numeric($str)) {             return array_unique($ret);         }         //挨個(gè)字符進(jìn)行判斷         $tree = $this->tree;         $words = '';         for ($i = 0; $i < $strLen; $i++) {             //unicode范圍 --> ord 范圍             //一字節(jié) 0-127 --> 0 - 127             //二字節(jié) 128-2047 --> 194 - 223             //三字節(jié) 2048-65535 --> 224 - 239             //四字節(jié) 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) {                 //四字節(jié)                 $word = $str[$i] . $str[$i + 1] . $str[$i + 2] . $str[$i + 3];                 $i += 3;             } else {                 //五字節(jié)php都溢出了                 //Parse error: Invalid UTF-8 codepoint escape sequence: Codepoint too large                 continue;             }             //判斷當(dāng)前字符             $tree = $tree->getChild($word);             if (is_null($tree)) {                 //當(dāng)前字不存在,則截取后再次循環(huán)                 $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;     } } /**  * 單個(gè)字符的節(jié)點(diǎn)  */ class WordNode {     //是否為非法詞匯末級(jí)節(jié)點(diǎn)     public $end = false;     //子節(jié)點(diǎn)     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;     } }
登錄后復(fù)制

推薦學(xué)習(xí):《PHP視頻教程》

php入門(mén)到就業(yè)線(xiàn)上直播課:立即學(xué)習(xí)
全程直播 + 實(shí)戰(zhàn)授課 + 邊學(xué) + 邊練 + 邊輔導(dǎo)

贊(0)
分享到: 更多 (0)
?
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
久久精品五月,日韩不卡视频在线观看,国产精品videossex久久发布 ,久久av综合
中文字幕一区二区三区在线视频| 国产日韩免费| 久久wwww| 欧美日韩精品一区二区三区视频 | 视频一区二区三区在线| 欧美va亚洲va日韩∨a综合色| 日韩中文在线电影| 国产精品探花在线观看| 欧美精品第一区| 人人草在线视频| 香蕉成人av| 91精品国产乱码久久久久久久 | 少妇精品导航| 日本成人在线一区| 麻豆精品在线观看| 色欧美自拍视频| 亚洲黄色网址| 欧美99久久| 日韩在线观看一区二区| 亚洲91网站| 国产精品久久久久9999高清| 狠狠久久伊人| 久久av中文| 日韩欧美精品| 蜜臀av免费一区二区三区| 在线一区免费观看| 亚洲免费成人av在线| 国产日韩高清一区二区三区在线 | 亚洲久久在线| 欧美一级二级三级视频| 麻豆精品久久久| 伊人网在线播放| 国产字幕视频一区二区| 久久福利精品| 97久久超碰| 麻豆精品久久久| 亚洲人成在线网站| 伊人成人网在线看| 日韩av一区二区三区| 美女av一区| 欧美不卡高清一区二区三区| 免播放器亚洲| 国产专区一区| 日韩美女国产精品| 国产a亚洲精品| 好吊日精品视频| 日韩高清一区| se01亚洲视频 | 国产日产高清欧美一区二区三区| 老司机精品久久| 国产精品主播| 免费观看久久av| 97久久精品| 久久视频一区| 欧美在线不卡| 成人看片网站| 日韩极品在线观看| 亚洲二区在线| 国产欧美一区二区色老头| 91精品久久久久久久久久不卡| 亚洲日产国产精品| 欧美极品一区二区三区| 欧美日韩国产亚洲一区| 免费视频一区二区三区在线观看 | 日本欧美久久久久免费播放网| 福利在线一区| 亚洲精品乱码| 秋霞影院一区二区三区| 97久久中文字幕| 久久精品一区二区不卡| 欧美日一区二区在线观看| 久久婷婷一区| 97成人在线| 99久久婷婷| 国产黄色精品| 视频一区欧美日韩| 蜜桃成人精品| 久久99精品久久久野外观看| 欧美日韩国产综合网| 精品一区二区三区免费看| 91精品韩国| 91精品国产调教在线观看| 欧美精选视频一区二区| 亚洲精品无播放器在线播放| 久久久久一区| 美腿丝袜亚洲三区| 一区二区亚洲视频| 91亚洲国产| 欧美片网站免费| 午夜在线精品| 日韩国产一区| 麻豆国产欧美一区二区三区 | 国产精品亚洲四区在线观看| 91精品观看| 色综合www| 国产一区二区三区四区大秀 | 亚洲一区二区日韩| 亚洲精品电影| 日韩在线观看| 韩国一区二区三区视频| 日韩中文字幕| 美女久久久久久| 麻豆精品蜜桃视频网站| 视频一区欧美精品| 久久香蕉精品香蕉| 国产精品久久久久77777丨| 日韩精品免费观看视频| 欧洲激情综合| 美女一区网站| 成人综合一区| 日韩二区在线观看| 一本综合精品| 蜜臀av在线播放一区二区三区| 久久久免费人体| 日韩精品三级| 2023国产精品久久久精品双| 一区二区三区四区日本视频| 美女视频网站久久| 欧美日韩xxxx| 97精品资源在线观看| 日韩三级精品| 亚洲精品综合| 亚洲精品少妇| 久久中文字幕导航| 欧美黑人巨大videos精品| 日韩欧美中文在线观看| 中文字幕成人| 日本亚洲视频| 亚洲精品自拍| 国产欧美一区二区三区国产幕精品| 日本午夜免费一区二区| 欧美一级二级视频| 国产欧美88| 你懂的亚洲视频| 鲁大师精品99久久久| 精品深夜福利视频| 四虎国产精品免费观看| 夜鲁夜鲁夜鲁视频在线播放| 久久国产免费| 午夜国产精品视频免费体验区| 伊人精品一区| 在线视频精品| 亚洲精品美女91| 日本vs亚洲vs韩国一区三区二区| 久久精品xxxxx| 精品无人区麻豆乱码久久久| 另类专区亚洲| 99成人在线| 国产精品一区二区av日韩在线| 日韩精品一级中文字幕精品视频免费观看 | 91亚洲国产成人久久精品| 高清日韩中文字幕| 日本精品在线中文字幕| 亚洲免费福利一区| bbw在线视频| 视频二区不卡| 伊人成人网在线看| 日韩精选在线| 国产精品毛片久久久| 成人一区不卡| 亚洲国产专区校园欧美| 视频一区二区三区在线| 国产精品一站二站| 国产色播av在线| 午夜电影亚洲| 欧美一级二区| 桃色av一区二区| 蜜桃久久久久久| 日本午夜精品久久久久| 不卡一二三区| 一区二区三区四区日韩| 麻豆精品视频在线| 亚洲高清激情| 奇米狠狠一区二区三区| 伊人网在线播放| 亚洲综合日韩| 亚洲香蕉视频| 99久久九九| 成人av三级| 三级欧美韩日大片在线看| 午夜电影一区| 亚洲少妇自拍| 亚洲精品亚洲人成在线观看| 国产精品中文字幕亚洲欧美| 成人日韩精品| 亚洲精品极品| 日本在线高清| 亚洲精品进入| 欧美成人基地| 国产欧美一区二区三区国产幕精品| 桃色一区二区| 日本综合视频| 成人免费网站www网站高清| 日韩在线麻豆| 99精品美女| 久久超碰99| 国产偷自视频区视频一区二区| 久久伊人国产| 首页亚洲欧美制服丝腿| 国产h片在线观看|