PHP利用中英文字符长度差异识别混合垃圾评论

Finn
Finn
发布时间:2026-10-15| 3人浏览过
原创

在使用内容管理系统时,常遇到一种特殊的垃圾评论:攻击者在长段英文中故意插入一两个生僻汉字,以此绕过基于关键词匹配的过滤机制,且这些汉字本身不违规。由于常规正则或黑名单难以覆盖,可改用计算“中文字符占比”的策略进行拦截。若文章核心为中文但中文占比过低,则极大概率为机器生成的干扰性评论。

实现原理:字符编码长度差异

该方案的核心在于利用 PHP 字符串处理函数对中文和英文字符的不同处理方式。在常见的 UTF-8 编码环境下:

  • strlen() 获取字符串的物理字节长度。对于 ASCII 字符(英文、数字),占用 1 个字节;对于大多数常用汉字,通常占用 3 个字节。
  • mb_strlen() 获取字符串的字符数量。无论是英文还是汉字,均计为 1 个字符。

基于上述差异,可以通过两者之差推算出汉字的实际数量,进而计算中文在全文中的比例。

具体操作步骤

第1步:获取物理字节与逻辑字符长度

首先,提取待检测的评论内容,分别计算其字节长度和字符个数。确保 mb_strlen 指定正确的编码格式(通常为 'UTF-8')。

$comment_text = $comment['text'];

// 获取字节长度(汉字按3字节计)
$len_bytes = strlen($comment_text);

// 获取字符数量(汉字按1字符计)
$len_chars = mb_strlen($comment_text, 'UTF-8');

第2步:计算中文占比

根据数学推导:
总字节数 ≈ (英文字符数 × 1) + (中文字符数 × 3)
总字符数 = 英文字符数 + 中文字符数
由此可得:中文字符数 = (总字节数 - 总字符数) / 2

将计算出的中文字符数除以总字符数,即为中文占比。以下为完整的判断逻辑实现:

// 假设中文字符数为 0 的情况需单独处理避免除零错误
if ($len_chars > 0) {
    // 计算中文所占比例
    $chinese_ratio = ($len_bytes - $len_chars) / (2 * $len_chars);
    
    // 设定阈值:若中文占比低于 0.5 (50%),则判定为可疑垃圾评论
    if ($chinese_ratio < 0.5) {
        return "检测到异常评论:中文内容过少,疑似垃圾信息";
    }
} else {
    // 如果字符数为0,视为空评论
    return "评论内容不能为空";
}

第3步:处理含代码块的复杂场景

上述逻辑默认应用于纯文本语境。但在技术论坛或允许贴代码的平台,用户 legitimately(合法地)发布包含大量英文代码和注释的帖子时,中文占比可能极低。
为避免误杀,建议在计算比率前,先将代码块(如 <code>、<pre> 标签内的内容)剔除,仅对用户输入的正文段落进行比率分析。

完成判断与排错

判定标准:当返回“中文占比低于阈值”的错误提示时,系统应拦截该提交或标记为人工审核状态。
注意事项:
1. 编码一致性:务必确认数据库存储和页面输出的编码均为 UTF-8,否则 mb_strlen 可能产生乱码或计算错误。
2. 特殊字符:部分 Emoji 或生僻字在 UTF-8 下可能占用 4 个字节,这会轻微影响精度,但对于防御通用垃圾评论已足够有效。
3. 业务适配:50% 仅为参考值。若是英文为主的技术博客,可适当降低阈值;若是纯中文资讯站,可提高至 60%-70%。

总结

利用 strlen 和 mb_strlen 的长度差来过滤垃圾评论,是一种轻量级且高效的手段。它专门针对“中英混杂”的反人类垃圾策略,无需引入复杂的机器学习模型即可显著提升评论质量。以上就是利用PHP中文字符比率判断垃圾评论的详细内容,更多关于PHP过滤技术优化的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。