在构建 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 支持的正则表达式库。无论哪种方式,构建一个安全、健康的内容环境始终是每位开发者的重要责任。