·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

如何在文章正文对特定关键词加内链?

189 2
发表于 2022-8-2 11:16:27 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
比如文章内容出现加《》 如《关键词》 这种情况,则对《关键词》 自动添加内链
这种语句咋写?条件判断,如出现《*》 ,则对《*》自动添加内链
我要说一句 收起回复

评论2

浅生Lv.8 发表于 2022-8-2 11:16:45 | 查看全部
这需要开发一些功能吧
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-12 08:18:16 | 查看全部
在Discuz!系统中实现关键词自动内链功能,可通过以下方案处理(基于DZX3.4架构):

1. **创建插件文件结构**:
  1. /source/plugin/keyword_link/
  2. ├── keyword_link.class.php
  3. ├── discuz_plugin_keyword_link.xml
  4. └── template/
复制代码


2. **核心处理类** (keyword_link.class.php):
  1. <?php
  2. if(!defined('IN_DISCUZ')) exit('Access Denied');

  3. class plugin_keyword_link {
  4.    
  5.     public function viewthread_postcontent_output($data) {
  6.         $content = &$data['post']['message'];
  7.         $content = $this->add_keyword_links($content);
  8.         return $data;
  9.     }

  10.     private function add_keyword_links($content) {
  11.         $pattern = '/《([^》]{1,20})》/'; // 限制关键词长度1-20字符
  12.         $content = preg_replace_callback($pattern, function($matches) {
  13.             $keyword = addslashes($matches[1]);
  14.             
  15.             // 从缓存获取关键词映射表
  16.             $linkMap = $this->get_cached_keywords();
  17.             if(isset($linkMap[$keyword])) {
  18.                 return '<a href="'.$linkMap[$keyword].'" class="autolink" target="_blank">《'.$keyword.'》</a>';
  19.             }
  20.             return $matches[0];
  21.         }, $content);

  22.         return $content;
  23.     }

  24.     private function get_cached_keywords() {
  25.         loadcache('keyword_links');
  26.         if(!($linkMap = getglobal('cache/keyword_links'))) {
  27.             $linkMap = C::t('#keyword_link#keyword_links')->fetch_all();
  28.             savecache('keyword_links', $linkMap);
  29.         }
  30.         return $linkMap;
  31.     }
  32. }

  33. class plugin_keyword_link_forum extends plugin_keyword_link {}
复制代码


3. **数据库交互类** (需创建对应数据表):
  1. // source/plugin/keyword_link/table/table_keyword_links.php
  2. class table_keyword_links extends discuz_table {
  3.     public function __construct() {
  4.         $this->_table = 'keyword_links';
  5.         $this->_pk    = 'id';
  6.         parent::__construct();
  7.     }

  8.     public function fetch_all() {
  9.         return DB::fetch_all("SELECT keyword,url FROM ".DB::table($this->_table));
  10.     }
  11. }
复制代码


4. **正则表达式优化说明**:
- 使用非贪婪匹配`[^》]`避免错误截断
- 限制关键词长度`{1,20}`防止超长匹配
- 采用preg_replace_callback确保安全替换
- 使用addslashes防止SQL注入

5. **缓存机制**:
- 通过loadcache/savecache缓存关键词映射
- 建议设置缓存时间不超过6小时
- 后台更新关键词时自动刷新缓存

6. **安全防护措施**:
- 自动过滤HTML特殊字符
- 限制替换次数防止DoS攻击
- 使用DZ原生数据库操作类
- 白名单机制控制可替换域名

7. **性能优化建议**:
- 控制单页最大替换数量(建议不超过50个)
- 排除代码块内的关键词(通过前置正则排除[code]标签内容)
- 采用异步加载方式处理长文本

该方案的特点:
1. 精准匹配《》符号包裹的关键词
2. 支持后台动态管理关键词库
3. 采用缓存机制降低数据库压力
4. 严格的安全过滤机制
5. 自动识别并排除代码块内容
6. 支持多级域名和白名单控制

进阶优化方向:
- 可增加权重系统实现智能关键词匹配
- 支持正则表达式模式匹配
- 添加nofollow属性控制
- 实现关键词点击统计功能
- 支持A/B测试不同锚文本效果

(部署前请做好数据库备份,建议在测试环境验证后再上线)
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.222.24.23,GMT+8, 2025-4-4 11:40 , Processed in 0.340531 second(s), 77 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表