织梦DedeCMS文档关键词维护中设置词语重叠后出错的修改方法
">
使用织梦系统的文档关键词维护,假如增加两个关键词为"织梦"和"织梦先生",那么在文章中出现"织梦先生"这个词的时候,锚文本HTML就会出错,我想这是很多用过这个功能的SEOer见到过的。
在很早以前我就发现过,但是因为自己已经很长时间没有使用织梦系统了,只是这次帮助客户修改时,有这个需求,就在这里做一下记录。
需要修改两个函数,都在同一个文件中(include/arc.archives.class.php),一个是类Archives中的ReplaceKeyword()函数,另一个是文件最末尾的_highlight()函数。
修改源码中把织梦原版代码注释掉了,以便比较源码和理解修改思路,源码如下:
/**
* 高亮问题修正, 排除alt title 直接的字符替换
*
* @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>)#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[] = "$key"; // 删除 和 ,增加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."
";
//恢复超链接
$body = preg_replace("/()/isU", '1>3<4', $body);
//暂时屏蔽超链接
$body = preg_replace("/()(.*)(<)(/a>)/isU", '1-]-4-[-6', $body);
}
//恢复超链接
$body = preg_replace("#()#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;
}
上一篇:织梦内容页,列表页,首页调用文章tag带url链接的方法
栏 目:DedeCMS
下一篇:织梦DedeCMS获取文章链接的函数GetOneArchive使用方法
本文标题:织梦DedeCMS文档关键词维护中设置词语重叠后出错的修改方法
本文地址:https://zz.feitang.co/CMSjiaocheng/27810.html
您可能感兴趣的文章
- 12-07Dedecms默认模板用户评论扩展
- 12-07DEDECMS匿名发布文章的修改教程
- 12-07DedeTag Engine Create File False DEDE栏目生成错误
- 12-07DEDECMS两年的网站优化经验
- 12-07dedecms防止被挂马必看安全知识
- 12-07DedeCms完美的FLASH幻灯代码
- 12-07dedecms首页幻灯片显示问题帮助教程
- 12-07DedeCms栏目内容过多分为2行显示
- 12-07Dedecms自动更新首页html插件
- 12-07DEDECMS循环滚动图片制作教程


阅读排行
推荐教程
- 09-22IIs Web网站的添加及配置
- 12-04dedecms织梦dede:channel标签的数字递增调用方法
- 12-07DEDECMS的{dede:arclist}如何调用文章或软件的任何字段
- 12-05DEDECMS后台功能说明书
- 12-02织梦(DEDECMS)将data目录迁移到web根目录之外
- 12-07DEDECMS完美无缝整合UC心得
- 12-04DedeCMS织梦后台模板列表如何按字母排序方法代码
- 12-04DedeCms获取任意栏目N级列表链接树形菜单的方法
- 12-07dedecms首页幻灯片显示问题帮助教程
- 12-04详解织梦模板DEDECMS搜索结果调用自定义字段的方法





