最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PHP實現敏感詞過濾功能

 更新時間:2023年10月27日 10:06:46   作者:小柳666  
后端同學在做一些社區(qū)論壇類型項目時候,可能會繞不開敏感詞的過濾這個功能,特別是在微信小程序中,如果主營類目被定義為【社交】 那么敏感詞、圖片、視頻的各種過濾功能是逃不掉的,否則是無法上線的,下面就以PHP代碼為例,分析一下這個功能的具體實現

需求分析

既然是敏感詞過濾,那么肯定是需要有一張敏感詞的數據表的。

大概就是上面這個樣子。

思路一

剛拿到需求我的第一實現思路就是,當獲取到用戶提交的評論內容以后,把數據庫中的每一個屏蔽詞都用正則去匹配一下。如果匹配到數據,那么就把匹配到的問題替換成 ** ,最后就把原文跟匹配完成的文字進行存儲即可。大體的代碼可能是下面這個樣子。

    $str = '我愛中國,我是賣qiang的,請與我聯系';
    $pattern = '/賣qiang/i';
    $replacement = '**';
    echo preg_replace($pattern,$replacement,$str);

    //  輸出  我愛中國,我是**的,請與我聯系

上面的代碼是正確的,但是假如屏蔽詞的數量有幾千條,那么每一個詞都需要跟待匹配的文字匹配一遍,那就是幾千次,程序的執(zhí)行效率太差。

思路二 一次匹配多個詞

既然一次匹配一個詞效率太低,那可以嘗試一次匹配多個詞。大致修改的代碼是下面這個樣子。

    $str = '我愛中國,我是賣qiang的,請與我聯系';
    $pattern = '/賣qiang|與我|非法|動物|系/i';    //這里會追加很多個詞
    $replacement = '**';
    echo preg_replace($pattern,$replacement,$str);

    //  我愛中國,我是**的,請**聯**

這樣的話,幾千個屏蔽詞組成一個正則。匹配一次就可以完成字符串的替換。但是假如屏蔽詞的數量有十萬,那正則的這個變量肯定超出內存報錯了。這種情況下就需要分組進行處理數據了。

$str = '我愛中國,我是賣qiang的,請與我聯系';
$block_arr = ['1','2','3',...,'100000'];
$sm_list = array_chunk($block_list, 1000);
foreach ($sm_list as $key => $value) {
    $pattern = "/" . implode("|",  array_column($list, 'word')) . "/i";    //這里會追加很多個詞
    $replacement = '**';
    $str = preg_replace($pattern,$replacement,$str);
}
echo $str;

//  我愛中國,我是**的,請**聯**

上面的代碼中,我們將一個無比巨大的數組,以1000為單位進行拆分。然后批量的去替換掉目標數據中可能存在的敏感詞。這樣就完成了敏感詞的過濾功能。

優(yōu)化選項

  • 敏感詞是一次查詢,數據量多的情況下每次都會很耗費資源。所以我們是需要把查詢出來的敏感詞放到redis緩存之中的。
  • 敏感詞匹配中,要先匹配長的,然后采取匹配短的。sql語句的排序 ->orderRaw('LENGTH(word) desc')

到此這篇關于基于PHP實現敏感詞過濾功能的文章就介紹到這了,更多相關PHP敏感詞過濾內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論

伊宁县| 凌云县| 渝北区| 宜昌市| 贡山| 荥经县| 祁东县| 永州市| 改则县| 庄河市| 景泰县| 石泉县| 仪陇县| 子洲县| 五台县| 封开县| 本溪市| 茌平县| 横峰县| 漾濞| 任丘市| 嘉黎县| 宁都县| 陈巴尔虎旗| 鱼台县| 荔波县| 灵寿县| 凤城市| 广丰县| 伊川县| 古田县| 麻江县| 梧州市| 佳木斯市| 扶风县| 宾阳县| 张家界市| 平湖市| 九寨沟县| 余干县| 瓮安县|