帝国CMS采集内容过滤HTML标签的核心操作在采集节点设置里完成,最直接的方式是勾选“过滤HTML标签”或在过滤函数中填入 `strip_tags` 配合自定义处理。本文按后台操作路径讲清楚从准备到验证的完整流程,适合刚接手帝国CMS站点、需要批量清理采集内容的站长和运维人员。
## 采集前先确认两件事
开始改配置之前,先确认当前采集节点用的是哪种采集方式。帝国CMS后台进入 **采集 → 采集节点管理**,找到正在使用的节点,看它属于“列表采集”还是“内容页采集”。两种方式过滤标签的位置不同,改错地方不会生效。
建议先备份数据库,尤其是 `phome_ecms_news` 这类主表。命令行下可以用:
```bash
mysqldump -u用户名 -p 数据库名 > /root/backup_$(date +%F).sql
```
备份完成后,再进入节点修改。这样即使过滤规则写错,也能快速回滚。
## 在采集节点里设置HTML标签过滤
进入 **采集 → 采集节点管理 → 修改节点**,找到“内容过滤”或“HTML过滤”相关的设置区域。帝国CMS通常提供两个入口:
- **过滤HTML标签**:勾选后,采集入库时会将内容中的 `
`、`
`、``、`
` 等标签直接去掉,只保留纯文本。
- **过滤函数**:在输入框里填写自定义函数名,例如 `strip_tags` 或自行编写的过滤函数。
如果只需要去掉标签、保留文字,直接勾选“过滤HTML标签”即可。如果还要保留部分标签(比如只允许 `` 和 `
`),就需要用 `strip_tags($text, '
')` 这种带白名单的方式,把它写进过滤函数里,并在 `e/class/userfun.php` 中定义对应函数:
```php
function my_strip_tags($text) {
return strip_tags($text, '
');
}
```
随后再做回到采集节点,把过滤函数填写为 `my_strip_tags`。注意函数名不要和帝国CMS已有函数冲突。
## 用“批量替换”清理已入库内容
如果内容已经采集入库,改节点不会自动处理旧数据。需要进入 **系统 → 批量替换字段值**,选择对应的数据表和正文字段,把常见标签替换为空。
常见做法是分多条规则执行:
- 查找 ``,替换为空
- 查找 `
`,替换为空
- 查找 ``、`
`,替换为空
- 查找 ` `,替换为空格
如果标签种类很多,直接写一条 SQL 更高效:
```sql
UPDATE phome_ecms_news_data_1
SET newstext = REGEXP_REPLACE(newstext, '<[^>]+>', '')
WHERE id > 0;
```
执行前务必确认表名和字段名与自己的站点一致,不同模型的数据表后缀可能不同,建议先 `SELECT` 少量数据试跑。
## 容易踩坑的几个地方
**过滤太干净会丢排版。** 如果正文里有代码示例、表格或图片说明,全部去标签会让内容难以阅读。建议保留 ``、`
`、`
` 这类基础标签,只清理嵌套的 `
`、`
` 和样式属性。
**过滤函数没生效,多半是函数没定义或写错位置。** `userfun.php` 修改后要确认文件编码是 UTF-8 无 BOM,否则函数可能加载失败。改完在采集节点重新采集一条测试数据,看入库结果是否已去掉标签。
**批量替换不可逆。** 执行 SQL 前先备份,或者先复制一份字段值到临时表。替换后建议抽查几条内容,确认没有误删正文。
## 验证过滤效果
采集或替换完成后,进入 **内容 → 新闻系统 → 管理新闻**,打开刚处理的文章,查看源代码或切换编辑器到源码模式,确认正文里不再出现多余的 ``、`style` 属性等标签。
也可以直接在数据库里抽查:
```sql
SELECT id, LEFT(newstext, 200) FROM phome_ecms_news_data_1 ORDER BY id DESC LIMIT 5;
```
如果返回的文本里还有大量标签,说明过滤规则没有覆盖到,需要回到节点设置或补充批量替换规则。
## 常见疑问
**采集时勾选了过滤HTML标签,为什么还有标签残留?** 可能是内容里混入了非标准标签或注释,`strip_tags` 对格式不规范的标签处理有限,需要配合正则替换。
**过滤后段落全挤在一起怎么办?** 说明 `
` 和 `
` 也被去掉了。可以在过滤函数里保留这两个标签,或者采集后手动用编辑器重新分段。
**批量替换能只处理某个栏目吗?** 可以,在批量替换时增加 `WHERE` 条件限定栏目 ID 或发布时间范围,避免影响其他内容。
帝国CMS采集内容过滤HTML标签并不复杂,关键是分清“采集时过滤”和“入库后清理”两条路径,改完配置后用一条测试数据验证结果,再批量处理旧内容。