本文目录导读:

在PHP项目中实现内容审核功能,通常需要结合前端提交、后端拦截、AI/人工审核以及数据库状态流转,以下是几种主流实现方案,从简单到复杂,供你参考:
基础方案:关键词与正则过滤
适用场景:对敏感词(如政治、色情、广告)进行即时拦截。
<?php
class ContentFilter {
private $keywords = ['敏感词1', '敏感词2']; // 从数据库或配置文件加载
public function check($text) {
foreach ($this->keywords as $word) {
if (mb_strpos($text, $word) !== false) {
return ['status' => false, 'msg' => '内容包含敏感词'];
}
}
// 也可以使用正则匹配模式
if (preg_match('/\b(暴力|色情)\b/i', $text)) {
return ['status' => false, 'msg' => '内容违规'];
}
return ['status' => true];
}
}
缺点:无法识别变体、谐音、图片内容,误判率高。
对接第三方内容审核API(推荐)
成熟方案,通常支持文本、图片、视频审核,以下以安全为例:
<?php
use AlibabaCloud\Client\AlibabaCloud;
class AIContentReview {
public function reviewText($text) {
AlibabaCloud::accessKeyClient('<your-access-key>', '<your-access-secret>')
->regionId('cn-shanghai')
->asDefaultClient();
try {
$result = AlibabaCloud::rpc()
->product('Green')
->version('2018-05-09')
->action('TextScan')
->method('POST')
->options([
'query' => [
'Tasks' => json_encode([
['dataId' => uniqid(), 'content' => $text]
]),
'Scenes' => json_encode(['antispam', 'ad'])
]
])
->request();
$body = $result->toArray();
if ($body['code'] == 200 && $body['data'][0]['results']['suggestion'] == 'pass') {
return ['status' => true, 'msg' => '审核通过'];
}
return ['status' => false, 'msg' => $body['data'][0]['results']['label'] ?? '违规'];
} catch (Exception $e) {
// 超时任其通过,或转为人工审核
return ['status' => true, 'msg' => '审核服务异常,暂放行'];
}
}
}
其他可选服务:
- 腾讯云天御
- 百度AI内容审核
- 网易易盾
优点:准确率高,支持图片/视频;缺点:需要付费,依赖网络。
混合审核流程(人工+AI)
适合UGC社区、电商评论等场景,设计数据库状态流转:
ALTER TABLE `articles` ADD `audit_status` TINYINT DEFAULT 0 COMMENT '0待审核 1通过 2拒绝 3需人工复审';
流程实现:
<?php
class AuditManager {
// 提交内容时
public function submitContent($userId, $content) {
// 1. 先进行AI审核
$aiResult = $this->aiCheck($content);
if ($aiResult['status'] === true) {
$status = 1; // 自动通过
} elseif ($aiResult['status'] === false && $aiResult['need_manual']) {
$status = 3; // 需人工复审
} else {
$status = 2; // 明确拒绝
$this->logViolation($userId, $content, $aiResult['reason']);
}
// 2. 写入数据库
$this->saveContent($content, $status);
return ['status' => $status];
}
// 人工审核后台
public function manualApprove($id, $action) {
$status = ($action == 'pass') ? 1 : 2;
DB::update('articles', ['audit_status' => $status], ['id' => $id]);
// 如果通过,发送通知给用户
}
}
人工审核后台:
- 可使用Laravel Nova、Voyager等后台框架快速搭建
- 展示待审核列表,支持预览、一键通过/拒绝
性能与架构优化
当需要处理大量内容时:
-
队列异步处理入队列(Redis/ RabbitMQ),Worker进程调用审核API。
// 使用Laravel队列示例 public function handle($job) { $content = $job->getContent(); $result = $this->aiService->check($content); $this->updateDatabase($content['id'], $result); } -
本地词库+布隆过滤器:对高频拦截词先用布隆过滤器做第一道筛选,减少API调用。
-
CDN图片审核:用户上传图片后,先存到OSS/CDN,触发云函数的异步审核回调。
安全注意事项
-
绕过检测:应对Unicode变体(如“敏
感”)、HTML实体编码(<script>`)等情况,先对文本进行标准化处理:$cleanText = html_entity_decode(strip_tags($text), ENT_QUOTES, 'UTF-8');
-
防止重放/规避:对同一内容短时间内多次提交,限制频率。
-
审核结果缓存(如刷帖)直接返回上次审核结果,减少接口调用。
-
用户反馈机制:提供用户申诉入口,误判时可人工复查。
根据预算与体量选择
| 阶段 | 推荐方案 | 成本 |
|---|---|---|
| 初创小项目 | 关键词过滤 + 简单正则 | 极低 |
| 成长型项目 | 第三方API(文本+图片) + 人工复审后台 | 中等(按调用量计费) |
| 大型平台 | 自研模型 + 异步队列 + 实时+离线混合审核 | 高(需算法团队) |
建议:即使使用关键词过滤,也建议对接一个低价第三方API作为补充,可显著减少因变体词导致的漏检。