本文目录导读:

- 方案一:基础自检(适用于 UGC 内容极低、成本极小的项目)
- 方案二:基于 AI 的第三方云服务(最推荐,主流方案)
- 方案三:图片 / 视频 / 音频审核
- 方案四:人工审核队列(不可或缺的兜底方案)
- 方案五:前端防堵(提升用户体验)
- 一个完整的审核流程建议
- 需要注意的坑
在 PHP 项目中实现内容审核,通常不是单单靠写几行 PHP 代码就能完成的,而是一个从前端防堵、后端校验、到第三方接口过滤,再到人工审核的完整链路。
以下按成本从低到高、安全性从低到高的顺序,给出几种常见的实现方案,你可以根据项目的敏感度和预算来选择。
基础自检(适用于 UGC 内容极低、成本极小的项目)
在 PHP 后端,用正则或关键词数组对用户输入进行拦截。仅作为第一道防线,极易被绕过。
<?php
// 禁止词列表
$bannedWords = ['赌博', '色情', '代开', '发票', '违禁品'];
function checkContent(string $content): bool {
global $bannedWords;
foreach ($bannedWords as $word) {
if (mb_strpos($content, $word) !== false) {
return false; // 包含敏感词,审核不通过
}
}
return true;
}
// 使用
if (!checkContent($_POST['comment'])) {
http_response_code(403);
echo '内容包含敏感信息,请修改';
exit;
}
// 通过后继续保存...
- 优点:零成本。
- 缺点:无法处理谐音、拼音、拆字(如“du博”)、图片、语音。
基于 AI 的第三方云服务(最推荐,主流方案)
这是目前大部分正规商业项目采用的方式,腾讯云、阿里云、百度云都提供了内容安全服务,支持文本、图片、音频、视频的自动审核。
以 PHP 调用腾讯云“文本内容安全”为例:
- 注册并购买:在腾讯云控制台开通“文本内容安全”服务,获取
SecretId和SecretKey。 - 安装 SDK:
composer require tencentcloud/tencentcloud-sdk-php - PHP 调用代码:
<?php
require_once 'vendor/autoload.php';
use TencentCloud\Common\Credential;
use TencentCloud\Common\Profile\ClientProfile;
use TencentCloud\Common\Profile\HttpProfile;
use TencentCloud\Tms\V20201229\TmsClient;
use TencentCloud\Tms\V20201229\Models\TextModerationRequest;
function aiTextCheck(string $content): array {
// 1. 实例化认证对象
$cred = new Credential("你的SecretId", "你的SecretKey");
$httpProfile = new HttpProfile();
$httpProfile->setEndpoint("tms.tencentcloudapi.com");
$clientProfile = new ClientProfile();
$clientProfile->setHttpProfile($httpProfile);
$client = new TmsClient($cred, "ap-guangzhou", $clientProfile);
// 2. 构造请求
$req = new TextModerationRequest();
$req->setContent(base64_encode($content)); // 记得 base64 编码
$req->setBizType("你的BizType(可选)");
// 3. 发送请求
try {
$resp = $client->TextModeration($req);
// 返回结果中是存在 $resp->Label; 和 $resp->Suggestion;
// Suggestion 有三个值:Pass(通过)、Review(疑似,需人工审核)、Block(违规)
return [
'suggestion' => $resp->getSuggestion(),
'label' => $resp->getLabel(),
'detail' => json_decode($resp->getDetail(), true)
];
} catch (\Exception $e) {
// 调用失败时,建议放行(防止误杀),但记录日志
return ['suggestion' => 'Pass', 'error' => $e->getMessage()];
}
}
业务逻辑中的使用:
$result = aiTextCheck($_POST['content']);
if ($result['suggestion'] === 'Block') {
// 直接拒绝:内容违规,禁止发布
http_response_code(400);
echo '内容包含违规信息(' . $result['label'] . ')';
} elseif ($result['suggestion'] === 'Review') {
// 疑似违规:进入人工审核队列,用户看到“内容待审核”
$status = 'pending_audit';
// 存入数据库,标记为待审核
} else {
// Pass:通过,正常发布
$status = 'published';
}
- 优点:准确率极高(90%+),支持多语言、长文本、谐音、变种。
- 缺点:需要付费(文本一般按条计费,约0.1元/千条左右;图片较贵)。
图片 / 视频 / 音频审核
原理同方案二,只是调用不同的 API 接口。
- 图片:调用云服务商的 图片审核(Image Moderation),通常传入图片的 URL 或 Base64。
- 视频/音频:云服务商支持异步审核,你上传文件后,他们会通过回调函数通知你审核结果。
- PHP 示例(上传图片并审核):
// 假设用户上传了一张图片
$imageUrl = uploadToCos($file); // 上传到自己或云存储
// 调用云服务审核接口
$result = aiImageCheck($imageUrl);
if ($result['suggestion'] === 'Block') {
// 违规:删除已上传的图片
deleteUploaded($imageUrl);
exit('图片违规,已拦截');
}
人工审核队列(不可或缺的兜底方案)
AI 不是100%准确的,对于不确定的内容(Review)或重要的UGC(如文章、商品描述),需要引入人工审核后台。
数据库设计示例:
ALTER TABLE user_content
ADD COLUMN status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending: 待审核, approved: 通过, rejected: 拒绝',
ADD COLUMN review_reason VARCHAR(255) DEFAULT NULL COMMENT '拒绝原因',
ADD COLUMN reviewed_by INT DEFAULT NULL COMMENT '审核人ID',
ADD COLUMN reviewed_at DATETIME DEFAULT NULL COMMENT '审核时间';
PHP 后台(Laravel / ThinkPHP 管理面板):
- 待审核列表:列出所有
status = 'pending'的内容。 - 详情页:展示原文+AI给出的
label+疑似敏感词高亮。 - 操作按钮:
通过、拒绝(并填写理由)。
// 审核通过
public function approve($contentId) {
DB::table('user_content')
->where('id', $contentId)
->update([
'status' => 'approved',
'reviewed_by' => auth()->id(),
'reviewed_at' => now()
]);
// 如果内容之前被屏蔽,这里可以触发邮件/通知告知用户已通过
}
// 审核拒绝
public function reject(Request $request, $contentId) {
$request->validate(['reason' => 'required|string']);
DB::table('user_content')
->where('id', $contentId)
->update([
'status' => 'rejected',
'review_reason' => $request->reason,
'reviewed_by' => auth()->id(),
'reviewed_at' => now()
]);
// 通知用户:你的内容因【xxx】被驳回
}
前端防堵(提升用户体验)
注意:前端验证不能替代后端,但可以减少无效请求。
- 敏感词前端提示:用户输入时,实时调用后端接口(或前端敏感词库)标记红色。
- 提交按钮置灰过短、过长或包含明显违规字符,暂时禁用提交按钮。
- 防刷限制:
- 频率限制:同一IP/用户1分钟内只能发1次。
- 内容限制:禁止重复发送完全相同的内容。
- 验证码:对于触发上述限制的用户,弹出滑动或文字验证码。
一个完整的审核流程建议
对于大多数 PHP 商业项目,推荐的实现顺序是:
- 前端校验(关键词提示 + 频率限制)
- PHP 后端 AI 云服务检测(文本 + 图片)
Block→ 直接拒绝,返回错误。Review→ 存入数据库,状态为pending(待人工),让用户端显示“内容正在审核中”。Pass→ 直接发布(或标记为已审核)。
- 人工审核后台:处理 Review 和用户举报的内容。
- 事后拦截即使已经发布,如果有用户举报,触发重新审核流程。
需要注意的坑
- 编码问题:处理中文字符时,务必使用
mb_*函数(如mb_strpos)。 - 接口异常处理:云 API 偶尔会超时或返回异常,建议逻辑:超时时放行(而不是堵死所有用户)。
- 成本控制:图片审核通常比文本贵得多,建议只对用户上传的公开图片(头像、文章封面等)进行 AI 审核,私聊图片可以只做举报处理。
- 法律法规:在中国大陆运营,必须能够配合监管部门提供审核记录(谁审核的、何时审核的、AI 的原报告),建议所有审核结果都写入数据库留存。
如果是个人练手项目,先做方案一(关键词)就够了;如果是正式商业项目,建议直接上方案二(云 API),成本可控且省心。
版权声明:足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
足球直播
足球直播
足球直播
足球直播
足球直播
中超直播
中超直播
中超直播
中超直播
中超直播
英超直播
英超直播
英超直播
英超直播
英超直播
德甲直播
德甲直播
德甲直播
德甲直播
德甲直播
西甲直播
西甲直播
西甲直播
西甲直播
西甲直播
意甲直播
意甲直播
意甲直播
意甲直播
意甲直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播