當前位置: 首頁> 最新文章列表> 使用mb_eregi_replace 替換字符串中的敏感詞

使用mb_eregi_replace 替換字符串中的敏感詞

M66 2025-06-03

在構建Web 應用時,處理用戶輸入內容是一項重要任務,尤其是過濾敏感詞。 PHP 提供了一些多字節字符串函數,其中mb_eregi_replace是一個強大的工具,適合用於多語言環境下對字符串進行不區分大小寫的替換操作。本文將介紹如何使用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 支持的正則表達式庫。無論哪種方式,構建一個安全、健康的內容環境始終是每位開發者的重要責任。