网络建站知识发布于分享网站

当前位置:首页>>新闻中心>>CMS教程>>dedecms教程

Dedecms文档关键词维护中词语重叠设置导致出错的解决方法

时间:2025-03-30 03:02:19    来源:    人气:3

在使用Dedecms CMS系统时,文档关键词的维护可能会遇到一些问题。例如,当增加两个关键词“DedecmsCMS”和“DedecmsCMS先生”时,如果文章中出现“DedecmsCMS先生”这个词,锚文本HTML可能会出错。这种现象是许多SEO从业者在使用该功能时常见的问题。 为了解决这个问题,我们需要对Dedecms系统的代码进行修改。具体的修改涉及两个函数,它们都在同一个文件中(`include/arc.archives.class.php`)。一个是类Archives中的`ReplaceKeyword()`函数,另一个是文件末尾的`_highlight()`函数。 这些修改旨在优化关键词替换逻辑,确保长关键词优先被处理,并避免因重复替换导致的HTML错误。以下是修改后的代码示例:


/**
 * 高亮问题修正, 排除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<>'' 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属性
    }
    
    foreach ($karr as $key => $word)
    {
        $body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\2', $karr[$key], $kaarr[$key], '\\1')", $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)
    {
        $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;
}
    
### 修改要点 1. **优先处理长关键词**:通过调整SQL查询语句,确保长关键词先被处理,避免短关键词替换影响长关键词。 2. **屏蔽与恢复超链接**:在替换过程中,暂时屏蔽已有的超链接,防止被误替换,最后再恢复。 3. **增加Class属性**:为生成的锚文本添加`class='title-prefix'`,便于样式控制。 通过上述修改,可以有效解决Dedecms CMS系统中关键词替换时可能出现的HTML错误问题,同时提升SEO效果。希望这篇文章能帮助到正在使用Dedecms CMS系统的用户。

如果您还有其他疑问或需要进一步的帮助,请随时联系我。

注意:在实际操作中,请确保备份原始文件,以防修改失败时能够快速恢复。

以上内容适用于Dedecms CMS系统的关键词替换功能优化,希望能为您的SEO工作提供帮助。

记得定期更新您的CMS系统,以获得最新的功能和安全性改进。

感谢阅读!

相关文章

  • Dedecms 删除文档时同时清除文章中图片的方法

    Dedecms 删除文档时同时清除文章中图片的方法

    在网站建设与维护的过程中,优化代码结构和功能是提升网站性能的重要步骤。本文将介绍如何通过自定义函数实现文章删除时自动清理相关资源的功能,从而提高系统的整洁性和存储效率。以下是具体的操作步骤及代码实现。首先, 在 `/include` 目录下创建一个名为 `extend.func.php` 的文件...
    2025-03-31
  • Dedecms上传图片提示302错误ERROR的解决方法

    Dedecms上传图片提示302错误ERROR的解决方法

    在进行图片上传操作时,用户可能会遇到302错误以及带有ERROR提示的图片上传失败问题。这些问题可能由多种原因引发,因此本文将对这些情况进行整理,以帮助大家更有效地定位并解决问题。 第一种情况:图片文件本身损坏。 这种情况会导致系统返回ERROR错误提示,不过发生概率较低。如果怀疑是图片损坏导致的...
    2025-03-31
  • DEDECMS模板使用教程

    DEDECMS模板使用教程

    如果您正在寻找一种高效的方法来使用Dedecms模板搭建网站或论坛,那么本文将为您提供详尽的指导。从模板解压到最终完成配置,每一步都将清晰呈现,帮助您快速掌握整个流程。 第一步:解压Dedecms模板 将下载的Dedecms模板文件解压出来,确保所有文件完整无误。如下图所示: 第二步:获取D...
    2025-03-31
  • Dedecms Dede 附加表自定义字段与主表文章关联方法

    Dedecms Dede 附加表自定义字段与主表文章关联方法

    在使用DedeCMS开发装修网站时,设计师和设计作品之间的关联是一个重要的功能需求。通常情况下,文章(作品)的内容部分存储在主表dede_addonarticle中,而自定义字段则存储在附加表dede_archives中。为了实现这一功能,可以采用以下两种方法。 ① 根据发布人调用相关文章; ...
    2025-03-31

公众号