织梦文档关键词维护中设置词语重叠后出错的修改方法
使用织梦系统的文档关键词维护,假如增加两个关键词为“织梦”和“织梦先生”,那么在文章中出现“织梦先生”这个词的时候,锚文本HTML就会出错,我想这是很多用过这个功能的SEOer见到过的。
在很早以前我就发现过,但是因为自己已经很长时间没有使用织梦系统了,只是这次帮助客户修改时,有这个需求,就在这里做一下记录。
需要修改两个函数,都在同一个文件中(include/arc.archives.class.php),一个是类Archives中的ReplaceKeyword()函数,另一个是文件最末尾的_highlight()函数。
修改源码中把织梦原版代码注释掉了,以便比较源码和理解修改思路,源码如下:
/** * 高亮问题修正, 排除alt title <a></a>直接的字符替换 * * @param string $kw * @param string $body * @return string */ function ReplaceKeyword($kw,&$body) { global $cfg_cmspath; $maxkey = 5; $kws = explode(",",trim($kw)); //以分好为间隔符 $i=0; $karr = $kaarr = $GLOBALS['replaced'] = array(); //暂时屏蔽超链接 $body = preg_replace("#(<a(.*))(>)(.*)(<)(/a>)#isU", '\1-]-\4-[-\6', $body); // $query = "SELECT * FROM keywords WHERE rpurl<>'' ORDER BY rank DESC"; // 原版的 $query="SELECT * FROM `keywords` WHERE rpurl<>'' and sta=1 ORDER BY length(keyword) DESC"; // 修改 优先处理长关键词 $this->dsql->SetQuery($query); $this->dsql->Execute(); while($row = $this->dsql->GetArray()) { $key = trim($row['keyword']); $key_url=trim($row['rpurl']); $karr[] = $key; $kaarr[] = "<a class='title-prefix' href='$key_url' target='_blank'>$key</a>"; // 删除 <u> 和 </u> ,增加class属性 } // 这里可能会有错误 // $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\2', $karr, $kaarr, '\1')", $body); foreach ($karr as $key => $word) { $body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\2', $karr[$key], $kaarr[$key], '\1')", $body); //echo $body."<br/>"; //恢复超链接 $body = preg_replace("/(<a(.*))-]-(.*)-[-(/a>)/isU", '\1>\3<\4', $body); //暂时屏蔽超链接 $body = preg_replace("/(<a(.*))(>)(.*)(<)(/a>)/isU", '\1-]-\4-[-\6', $body); } //恢复超链接 $body = preg_replace("#(<a(.*))-]-(.*)-[-(/a>)#isU", '\1>\3<\4', $body); return $body; }
//高亮专用, 替换多次是可能不能达到最多次 function _highlight($string, $words, $result, $pre) { global $cfg_replace_num; $string = str_replace('"', '"', $string); if($GLOBALS['replaced'][$words] == 1){ return $pre.$string; } if($cfg_replace_num > 0) { // foreach ($words as $key => $word) // { // if($GLOBALS['replaced'][$word] == 1) // { // continue; // } //$string = preg_replace("#".preg_quote($key)."#", $result[$key], $string, $cfg_replace_num); $string = preg_replace("#".preg_quote($words)."#", $result, $string, $cfg_replace_num); // 修改后 if(strpos($string, $words) !== FALSE) { $GLOBALS['replaced'][$words] = 1; } // } } else { $string = str_replace($words, $result, $string); } return $pre.$string; }
(资源库 www.zyku.net)
上一篇:织梦DedeCMS获取文章链接的函数GetOneArchive使用方法
栏 目:DedeCMS
下一篇:返回列表
本文地址:https://www.zyku.net/dedecms/1688.html
您可能感兴趣的文章
- 02-27帝国CMS调用包含指定关键词文章列表的方法
- 02-27帝国CMS内容页调用关键词为文章关键词,描述为文章简介
- 02-23DedeCMS 5.7文档关键词维护项“链接网址”过长显示不
- 02-22DedeCMS栏目关键词和内容关键词字数限制的解决方法
- 02-22DedeCMS调用某一关键词文章的调用标签
- 09-27苹果手机添加听歌背景音步骤一览
- 02-10opporeno5手机系统一键清理教程
- 11-21红米note10关闭自动升级系统步骤分享
- 07-05米兔儿童手表volte功能开启方法介绍
- 01-14WiFi速联精灵-WiFi速联精灵应用软件功
- 01-25Python打包exe时各种异常处理方案总结
- 03-01华为手机退出无障碍屏幕朗读方法
- 01-11十字绣绘画-十字绣绘画应用软件功能介
- 09-19hellotalk加好友步骤介绍
- 09-28iphone13如何开启个人热点
- 02-20CentOS服务器系统下更改Apache默认网
- 12-27垃圾清理君-垃圾清理君应用软件功能介
- 02-17微信小程序 详解页面跳转与返回并回传
- 03-01oppoencofree2设置遥控拍照方法
- 02-21DedeCMS隐藏模板路径防止模板被盗的几
最近更新
阅读排行
猜你喜欢
- 09-16小米手机如何添加游戏加速到桌面
- 09-25汽车之家删除自己的帖子方法介绍
- 01-11二年级下册语文助手-二年级下册语文助
- 11-16精益求精-帝国网站管理系统7.5测试版开
- 01-14农场种植学习助手-农场种植学习助手应
- 01-28苹果12设置按键音方法
- 01-10小练咖老师端-小练咖老师端应用软件功
- 01-24小米手机应用升级通知关闭方法
- 02-17苹果手机桌面时钟组件放大设置方法
- 01-10利来-利来应用软件功能介绍