- 最新
- 最旧
-
10小时前 广西
用是什么数据库?以mysql5.6为例:
PHP 批量替换违禁词代码
// 1. 数据库连接配置
$dsn = 'mysql:host=localhost;dbname=your_database;charset=utf8mb4';
$username = 'your_username';
$password = 'your_password';
try {
$pdo = new PDO($dsn, $username, $password, [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_EMULATE_PREPARES => false, // 关闭模拟预处理,提高真实预编译安全性
]);
} catch (PDOException $e) {
die("数据库连接失败: " . $e->getMessage());
}
// 2. 定义违禁词列表
$bannedWords = ['违禁词1', '违禁词2', '敏感词', '非法内容'];
// 3. 构建正则表达式
// 使用 preg_quote 防止违禁词中的特殊字符破坏正则
// \b 表示单词边界,防止把 "不敏感词" 替换成 "不***"
// 如果你的违禁词包含中文且 \b 不生效,可以去掉 \b,或者使用更复杂的中文边界正则
$pattern = '/\b(' . implode('|', array_map('preg_quote', $bannedWords)) . ')\b/iu';
// 注意:如果 \b 对纯中文无效,可以改用: $pattern = '/(' . implode('|', array_map('preg_quote', $bannedWords)) . ')/iu';
$replacement = '***';
$batchSize = 500; // 每次处理的条数,防止内存溢出
$lastId = 0;
echo "开始处理违禁词...\n";
// 4. 分批循环处理
while (true) {
// 使用 ID 游标分页,比 LIMIT offset, size 性能更好
$sql = "SELECT id, content FROM articles WHERE id > :lastId ORDER BY id ASC LIMIT :batchSize";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':lastId', $lastId, PDO::PARAM_INT);
$stmt->bindValue(':batchSize', $batchSize, PDO::PARAM_INT);
$stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 如果没有更多数据,退出循环
if (empty($rows)) {
break;
}
// 准备更新语句
$updateSql = "UPDATE articles SET content = :content WHERE id = :id";
$updateStmt = $pdo->prepare($updateSql);
// 开启事务,提高批量写入性能
$pdo->beginTransaction();
$updatedCount = 0;
foreach ($rows as $row) {
$originalContent = $row['content'];
// 使用 PHP 正则替换
$newContent = preg_replace($pattern, $replacement, $originalContent);
// 【重要】只有当内容真正发生变化时,才执行 UPDATE,减少数据库 IO
if ($newContent !== $originalContent) {
$updateStmt->execute([
':content' => $newContent,
':id' => $row['id']
]);
$updatedCount++;
}
}
$pdo->commit();
// 更新游标
$lastId = end($rows)['id'];
echo "已处理到 ID: {$lastId},本批次实际更新: {$updatedCount} 条\n";
}
echo "所有文章处理完毕!\n";欢迎光临www.gx12366.com财税站。
- 老叶 做个开放平台 让我们也做点功能 接入260 站点早餐钱 07-21
- 叶总应该在憋大招了,各位看官别急嘛 07-21
- 360跟BING更新的真快 07-21
- 10086客服后续的终止后续来了 07-21
- 亏麻了,天天不敢睁开眼 07-21

![[百度/夸克/迅雷]网盘拉新渠道申请,新手也能轻松月入上万!](https://www.260.cn/wp-content/uploads/2026/07/202607061547144bcf95af.jpg)




感谢优质内容,用金币表达支持。同一主题仅可打赏一次。
我的金币: 0