过滤”规则(最简单、推荐首选)
这是织梦采集内置的功能,专门用于处理这类简单替换,无需修改代码,是最安全、最便捷的方法。
操作步骤:
-
登录织梦后台,进入“采集” -> “采集管理”。
-
找到你想要修改的采集规则,点击后面的“修改”按钮。
-
在规则编辑页面,滚动到最底部,找到“内容过滤”设置区域。
-
过滤”的文本框中,输入以下正则表达式:
<a[^>]*>(.*?)</a>
代码解释:
<a:匹配<a标签的开始。[^>]*:匹配>之前的所有字符,即a标签的所有属性(如href,title,target等)。- 这是一个捕获组,匹配
<a>和</a>之间的所有内容(即链接的文本),这部分内容我们希望保留。 </a>:匹配a标签的结束。
-
关键一步:选择过滤方式。
- 过滤”文本框下方,通常有一个“替换为”的输入框。这里留空即可。
- 然后在“过滤方式”或类似的下拉菜单中,选择“替换”或“正则替换”。
- 这样做的效果是:将匹配到的整个
<a>...</a>结构替换为空(即删除),但因为我们使用了捕获组 ,织梦在执行替换时,默认会保留捕获组里的内容。
-
点击“保存”按钮。
效果:<a href="https://example.com" target="_blank">这是一个外部链接</a>,请点击访问,``这是一个外部链接,请点击访问。
修改采集入库处理函数(更彻底、一劳永逸)
如果你希望这个过滤效果对所有使用此规则的采集都生效,并且不想每次修改规则都去设置内容过滤,可以修改织梦的核心处理函数,这个方法会修改系统文件,请务必先备份文件。
操作步骤:
-
备份文件:找到并备份
include/dedecollection.class.php文件。 -
编辑文件:用文本编辑器(如 Notepad++、VS Code)打开
include/dedecollection.class.php文件。 -
定位代码:在文件中搜索
function RunHtml,你会找到处理文章内容的函数。 -
添加过滤代码:在
function RunHtml函数内部,找到处理完文章内容(通常是一个名为$this->SplitValue的变量)之后,但在返回结果之前,添加以下代码:// 在 return $this->SplitValue; 这行代码之前添加 /** * 过滤掉内容中的所有a标签,但保留a标签内的文本 * 使用正则表达式替换 */ $this->SplitValue = preg_replace('/<a\s+.*?>.*?<\/a>/si', '', $this->SplitValue); // 更精确的写法,与方法一的正则类似,可以保留标签内的文本 // $this->SplitValue = preg_replace('/<a\s+[^>]*>([^<]*)<\/a>/i', '$1', $this->SplitValue);代码解释:
preg_replace:PHP的正则替换函数。/<a\s+.*?>.*?<\/a>/si:这个正则表达式会匹配整个<a>标签及其所有内容。<a\s+:匹配<a后面跟至少一个空白字符(href等属性)。.*?>:非贪婪匹配,直到遇到第一个>。- 非贪婪匹配标签内的所有内容。
<\/a>:匹配</a>。/si:s模式使 可以匹配换行符,i模式使匹配不区分大小写。
- 将匹配到的内容替换为空字符串,即直接删除。
-
保存文件:保存对
dedecollection.class.php的修改。
效果:
从此以后,所有通过这个采集类处理的文章内容,在入库前都会自动移除 <a> 标签,这是最一劳永逸的方法。
使用“自定义处理”PHP代码(最灵活、功能最强)
如果你的需求更复杂,比如只想过滤某些特定网站来源的 <a> 标签,或者在过滤的同时需要做其他处理,可以使用这个方法。
操作步骤:
-
修改采集规则:在采集规则编辑页面,找到“自定义处理”部分。
-
编写PHP代码:在文本框中输入自定义的PHP代码,这段代码会在文章内容入库前执行。
// 自定义处理函数,过滤a标签 $this->SplitValue = preg_replace('/<a\s+[^>]*>(.*?)<\/a>/is', '', $this->SplitValue); // 如果想保留a标签内的文字,可以使用下面这行 // $this->SplitValue = preg_replace('/<a\s+[^>]*>(.*?)<\/a>/is', '$1', $this->SplitValue); -
保存规则:保存采集规则。
效果: 效果与方法二类似,但代码只针对当前这个采集规则生效,灵活性更高,适合特殊场景。
总结与建议
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 内容过滤 | 简单、安全、不修改核心文件,可视化操作。 | 每个规则都需要单独设置,规则多时稍显繁琐。 | 绝大多数情况下的首选,适合所有用户。 |
| 修改核心函数 | 一劳永逸,对所有采集规则生效,效率高。 | 需要修改核心文件,有升级被覆盖的风险,对新手不友好。 | 网站管理员,希望永久性解决此问题,且不介意修改系统文件。 |
| 自定义处理 | 灵活性极高,可以结合其他逻辑,只对特定规则生效。 | 需要一定的PHP代码能力,调试相对复杂。 | 有特殊需求的进阶用户,例如需要根据不同来源进行不同处理。 |
给新手的建议: 请直接使用 方法一,它完全能满足你的需求,而且最安全。
给网站管理员的建议: 如果你确定网站所有采集规则都需要这个功能,并且愿意承担维护修改的代价,方法二是最佳选择。
