在構(gòu)建一個(gè)用戶評(píng)論功能時(shí),我需要一個(gè)可靠的方法來(lái)過(guò)濾掉包含臟話和不當(dāng)言論的評(píng)論。最初,我嘗試使用簡(jiǎn)單的字符串替換,但這很容易被用戶利用各種變體繞過(guò)。例如,“badword”可以被替換成“b@dword”、“b-a-d-w-o-r-d”等等。 我甚至嘗試編寫(xiě)復(fù)雜的正則表達(dá)式,但維護(hù)起來(lái)非常困難,而且容易出現(xiàn)誤判。
這時(shí),我發(fā)現(xiàn)了arif-rh/profanity-Filter這個(gè)庫(kù)。它不僅能進(jìn)行簡(jiǎn)單的關(guān)鍵詞匹配,還能檢測(cè)各種變體,例如字符替換、插入標(biāo)點(diǎn)符號(hào)、重復(fù)字符等等。更重要的是,它提供了靈活的配置選項(xiàng),允許我自定義臟詞列表,并添加白名單來(lái)避免誤判。
安裝這個(gè)庫(kù)非常簡(jiǎn)單,只需要使用composer:
composer require arif-rh/profanity-filter
使用起來(lái)也很直觀:
use ArifRhProfanityFilterCheck;// 使用默認(rèn)的臟詞列表$check = new Check();$hasProfanity = $check->hasProfanity("This is a badword."); // 檢查是否包含臟話$cleanedWords = $check->cleanWords("This is a badword."); // 過(guò)濾臟話,用星號(hào)(*)替換// 使用自定義的臟詞列表 (從數(shù)組或文件加載)$badWords = ['badword', 'anotherbadword'];$check = new Check($badWords);$hasProfanity = $check->hasProfanity("This contains anotherbadword.");$cleanedWords = $check->cleanWords("This contains anotherbadword.", "+"); // 使用 "+" 替換臟詞// 使用白名單避免誤判$whitelist = ['goodword'];$check = new Check($badWords, $whitelist);$hasProfanity = $check->hasProfanity("This is a goodword but contains badword.");// 獲取檢測(cè)到的臟詞$check->hasProfanity("This is a badword.");echo $check->getBadWordsFound(); // 輸出:badword
arif-rh/profanity-filter庫(kù)還支持多種過(guò)濾模式,可以根據(jù)需要選擇合適的策略。它新增的cleanWords方法允許只模糊處理臟詞,而不會(huì)影響句子其他部分,這比原庫(kù)的全局替換更靈活。此外,getBadWordsFound方法可以方便地獲取檢測(cè)到的臟詞,方便進(jìn)行日志記錄和進(jìn)一步處理。
總而言之,arif-rh/profanity-filter庫(kù)是一個(gè)高效、靈活且易于使用的臟話過(guò)濾工具,極大地簡(jiǎn)化了我的開(kāi)發(fā)工作,提升了評(píng)論系統(tǒng)的安全性。 它比我之前嘗試的各種方法都更加強(qiáng)大和可靠。 強(qiáng)烈推薦給需要進(jìn)行內(nèi)容過(guò)濾的開(kāi)發(fā)者們。