首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 簡單內容過濾實例:敏感詞檢測與攔截

     編輯:PHP 相關知識

核心邏輯

  1. 從文件 filter.txt 讀取敏感詞列表(每行一個)。
  2. 獲取用戶提交內容 $_POST['mess']。
  3. 遍歷敏感詞,使用 preg_match 不區分大小寫匹配。
  4. 命中即彈出提示並終止腳本。
  5. 未命中則正常顯示內容。

完整代碼

<?php
if ($_POST) {
    // 讀取敏感詞文件,自動去除換行符
    $filter_words = file("./filter.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
    // 也可用 explode("\n", file_get_contents(...)) 但 file() 更簡潔

    $str = $_POST['mess'] ?? '';

    foreach ($filter_words as $word) {
        $word = trim($word);
        if ($word === '') continue;
        // /i 不區分大小寫,邊界可按需加 \b
        if (preg_match("/" . preg_quote($word, '/') . "/i", $str)) {
            echo "<script>alert('您輸入的內容含非法內容,請重輸!');</script>";
            echo "<a href='index.php'>返回</a>";
            exit;
        }
    }

    echo "您輸入的內容是: " . htmlspecialchars($str);
}
?>
<h2>測試過濾是否生效:</h2>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
    <p><textarea name="mess" cols="40" rows="4"></textarea></p>
    <p><input type="submit" name="sub" value="send"></p>
</form>

filter.txt 示例

賭博
色情
暴力
廣告
敏感詞4

關鍵改進點(生產環境必做)

問題解決方案
正則特殊字符導致錯誤/誤匹配使用 preg_quote($word, '/') 轉義元字符
大量敏感詞遍歷效率低構建 Trie 樹 / AC 自動機 / DFA 算法,單次掃描 O(n) 完成匹配
繞過手段(同音字、拆字、插入零寬字符)引入文本規範化:全半角統一、去除零寬字符、拼音/聲母比對、同義詞擴展
誤傷正常內容(如「幹」字)引入白名單、上下文語義分析、機器學習分類器
前端繞過提交後端必須二次驗證,前端僅作體驗優化
XSS 風險輸出時 htmlspecialchars(),內容存庫前不轉義,輸出時轉義

推薦開源方案

  • PHP-Sensitive-Word-Filter:基於 DFA 的高性能敏感詞過濾庫。
  • GreenWeb:騰訊開源的內容安全 SDK(需接口調用)。
  • Symfony Security / Laravel Purifier:框架級整合方案。

總結

簡單項目可用 file() + preg_match 快速實現;中大型項目務必引入專業過濾庫或雲服務,並建立「規則庫+模型+人工複審」三層防線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved