织梦文档关键词维护中设置词语重叠后出错的修改方法
使用织梦系统的文档关键词维护,假如增加两个关键词为“织梦”和“织梦先生”,那么在文章中出现“织梦先生”这个词的时候,锚文本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调用某一关键词文章的调用标签
- 02-27帝国CMS内容页调用关键词为文章关键词
- 11-02荣耀Earbudsx1耳机恢复出厂设置教程介
- 12-29时时饮水-时时饮水应用软件功能介绍
- 04-24Radio选项选中触发事件弹出输入框效果
- 02-28WordPress让最新文章和置顶文章添加ne
- 03-07WordPress测试服务器空间是否支持mail
- 10-222021淘宝天猫双十一双11超级红包活动
- 06-25PHP把字符串数字转换为整数数字
- 12-25Windows Server 2008 R2常规安全设置
- 11-16微信群在线编辑文档怎么发
- 07-15帝国cms支付宝接口最新网关地址更改方
- 08-15mobaxterm上传文件教程分享
- 12-21荣耀20s设置锁屏壁纸教程
- 03-11FastAdmin 系统升级更新教程
- 09-19goodnotes5添加模板教程分享

最近更新
阅读排行
猜你喜欢
- 10-09lofter怎么取消推荐显示
- 03-31Linux使用ssh公钥实现免密码登录实例
- 11-01autosleep安装到手表步骤分享
- 09-052021年15个国内优秀低代码开发平台对
- 10-24realmegtneo2怎么切换天气闹钟
- 11-23QQ音乐怎么开启听歌时动感光效
- 08-15opporeno6照片云同步在哪里设置
- 10-22小米civi隐藏应用教程一览
- 11-28Apache隐藏版本号及其它敏感信息
- 09-16apple store取消订阅方法分享