当前位置: 首页> 最新文章列表> 使用 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 支持的正则表达式库。无论哪种方式,构建一个安全、健康的内容环境始终是每位开发者的重要责任。