您好,欢迎来到菜鸟吧源码网(www.cniao8.com)本站只做精品网站源码!
  • 首 页
  • 菜鸟云
  • 公告:本站资源均来源于互联网及会员投稿发布,所有资源仅供学习参考研究使用,请勿商用或其它非法用途,商用请购买正版,否则产生一切后果由用户自行承担!谢谢!

     

    当前位置:主页 > 站长学堂 > dede教程 >
    织梦文档关键词维护中设置词语重叠后出错的修改方法
    时间:2020-08-03 11:45 作者:菜鸟吧 浏览:收藏 挑错 打印

    使用织梦系统的文档关键词维护,假如增加两个关键词为“织梦”和“织梦先生”,那么在文章中出现“织梦先生”这个词的时候,锚文本HTML就会出错,我想这是很多用过这个功能的SEOer见到过的。

    在很早以前我就发现过,但是因为自己已经很长时间没有使用织梦系统了,只是这次帮助客户修改时,有这个需求,就在这里做一下记录。

    需要修改两个函数,都在同一个文件中(include/arc.archives.class.php),一个是类Archives中的ReplaceKeyword()函数,另一个是文件最末尾的_highlight()函数。

    修改源码中把织梦原版代码注释掉了,以便比较源码和理解修改思路,源码如下:

    01/**
    02* 高亮问题修正, 排除alt title <a></a>直接的字符替换
    03*
    04* @param string $kw
    05* @param string $body
    06* @returnstring
    07*/
    08functionReplaceKeyword($kw,&$body)
    09{
    10global $cfg_cmspath;
    11$maxkey = 5;
    12$kws = explode(",",trim($kw));    //以分好为间隔符
    13$i=0;
    14$karr = $kaarr = $GLOBALS['replaced'] = array();
    15
    16//暂时屏蔽超链接
    17$body = preg_replace("#(<a(.*))(>)(.*)(<)(/a>)#isU", '\1-]-\4-[-\6', $body);
    18
    19// $query = "SELECT * FROM keywords WHERE rpurl<>'' ORDER BY rank DESC"; // 原版的
    20$query="SELECT * FROM `keywords` WHERE rpurl<>'' and sta=1 ORDER BY length(keyword) DESC"; // 修改 优先处理长关键词
    21$this->dsql->SetQuery($query);
    22$this->dsql->Execute();
    23while($row = $this->dsql->GetArray())
    24{
    25$key = trim($row['keyword']);
    26$key_url=trim($row['rpurl']);
    27$karr[] = $key;
    28$kaarr[] = "<a class='title-prefix' href='$key_url' target='_blank'>$key</a>"; // 删除 <u> 和 </u> ,增加class属性
    29}
    30
    31// 这里可能会有错误
    32// $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\2', $karr, $kaarr, '\1')", $body);
    33
    34foreach ($karr as $key => $word)
    35{
    36$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\2', $karr[$key], $kaarr[$key], '\1')", $body);
    37//echo$body."<br/>";
    38//恢复超链接
    39$body = preg_replace("/(<a(.*))-]-(.*)-[-(/a>)/isU", '\1>\3<\4', $body);
    40//暂时屏蔽超链接
    41$body = preg_replace("/(<a(.*))(>)(.*)(<)(/a>)/isU", '\1-]-\4-[-\6', $body);
    42}
    43
    44//恢复超链接
    45$body = preg_replace("#(<a(.*))-]-(.*)-[-(/a>)#isU", '\1>\3<\4', $body);
    46return$body;
    47}

    查看源码
    打印代码帮助
    01//高亮专用, 替换多次是可能不能达到最多次
    02function_highlight($string, $words, $result, $pre)
    03{
    04global $cfg_replace_num;
    05$string = str_replace('"', '"', $string);
    06if($GLOBALS['replaced'][$words] == 1){
    07return$pre.$string;
    08}
    09if($cfg_replace_num > 0)
    10{
    11// foreach ($words as $key => $word)
    12// {
    13//     if($GLOBALS['replaced'][$word] == 1)
    14//     {
    15//         continue;
    16//     }
    17//$string = preg_replace("#".preg_quote($key)."#", $result[$key], $string, $cfg_replace_num);
    18$string = preg_replace("#".preg_quote($words)."#", $result, $string, $cfg_replace_num);  // 修改后
    19if(strpos($string, $words) !== FALSE)
    20{
    21$GLOBALS['replaced'][$words] = 1;
    22}
    23// }
    24}
    25else
    26{
    27$string = str_replace($words, $result, $string);
    28}
    29return$pre.$string;
    30}


    郑重声明:
    本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,不存在任何商业目的与商业用途。 若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
    我们不承担任何技术及版权问题,且不对任何资源负法律责任。
    如无法下载,联系站长索要。
    如有侵犯您的版权,请给我们来信:admin@cniao8.com,我们尽快处理。

    织梦中{dede:channel}无法调用隐藏栏目解决方法织梦中{dede:channel}无法调用隐藏栏目
    DEDECMS批量导入excel数据到后台文章系统的开发教程DEDECMS批量导入excel数据到后台文章系
    织梦58织梦模板加固版教程详解织梦58织梦模板加固版教程详解