/**
* 高亮问题修正, 排除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<>'' 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属性
}
foreach ($karr as $key => $word)
{
$body = preg_replace("/(^|>)([^<]+)(?=<|$)/sUe", "_highlight('\\\\2', $karr[$key], $kaarr[$key], '\\\\1')", $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)
{
$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;
}
如果您还有其他疑问或需要进一步的帮助,请随时联系我。
注意:在实际操作中,请确保备份原始文件,以防修改失败时能够快速恢复。
以上内容适用于Dedecms CMS系统的关键词替换功能优化,希望能为您的SEO工作提供帮助。
记得定期更新您的CMS系统,以获得最新的功能和安全性改进。
感谢阅读!