在構建Web 應用時,處理用戶輸入內容是一項重要任務,尤其是過濾敏感詞。 PHP 提供了一些多字節字符串函數,其中mb_eregi_replace是一個強大的工具,適合用於多語言環境下對字符串進行不區分大小寫的替換操作。本文將介紹如何使用mb_eregi_replace來替換文本中的敏感詞。
mb_eregi_replace是PHP 多字節字符串擴展mbstring提供的函數,其基本語法如下:
mb_eregi_replace(string $pattern, string $replacement, string $string, string $option = ""): string|false
$pattern :正則表達式,用於匹配要替換的字符串(不區分大小寫)。
$replacement :用於替換的內容。
$string :原始字符串。
$option :可選參數,用於指定編碼等設置。
該函數適用於UTF-8 等多字節字符集的處理,是處理中文敏感詞過濾的理想選擇。
下面是一個簡單示例,展示如何用mb_eregi_replace來替換字符串中的敏感詞:
<?php
// 敏感詞列表
$sensitive_words = ['賭博', '顏色情', '暴力'];
// 要處理的文本
$input_text = "這個網站包含賭博和顏色情內容,訪問 https://m66.net/play 會有更多信息。";
// 替換字符
$replacement = '***';
// 循環替換所有敏感詞
foreach ($sensitive_words as $word) {
$input_text = mb_eregi_replace($word, $replacement, $input_text);
}
echo $input_text;
?>
輸出結果:
這個網站包含***和***內容,訪問 https://m66.net/play 會有更多信息。
如上所示, mb_eregi_replace能準確替換多字節敏感詞,並保留URL 和其他內容不變。
在實際應用中,敏感詞可能存在變形,比如添加空格或特殊符號。我們可以使用更複雜的正則表達式提高識別能力,例如:
<?php
$sensitive_words = ['賭\s*博', '顏色\s*情', '暴\s*力'];
$input_text = "這是一段涉賭 博內容,還包含暴 強大se情,请勿訪問 http://m66.net/bad.html。";
foreach ($sensitive_words as $word) {
$pattern = $word;
$input_text = mb_eregi_replace($pattern, '***', $input_text);
}
echo $input_text;
?>
輸出:
這是一段涉***內容,還包含***和***,请勿訪問 http://m66.net/bad.html。
使用\s*匹配任意空格,使得變形的敏感詞也能被正確替換。
mb_eregi_replace在PHP 8.0 之後被移除,推薦使用preg_replace搭配mb_convert_encoding實現類似功能。
使用前請確保已啟用mbstring擴展。
匹配模式中的特殊字符應當轉義,否則可能造成正則匹配錯誤。
通過mb_eregi_replace ,我們可以輕鬆實現在多語言環境中對敏感詞的精準替換。但需要注意它的兼容性問題,建議新項目中考慮使用更現代的替代方案,如結合preg_replace和Unicode 支持的正則表達式庫。無論哪種方式,構建一個安全、健康的內容環境始終是每位開發者的重要責任。