在很早以前我就发现过,但是因为自己已经很长时间没有使用织梦系统了,只是这次帮助客户修改时,有这个需求,就在这里做I.下记录.
需要修改两个函数,都在同I.个文件中(include/arc.archives.class.php),I.个是类Archives中的ReplaceKeyword()函数,另I.个是文件最" />

"景先生毕设|www.jxszl.com

织梦文档關键词维护中设置词语重叠后出错的修改方法

2022-10-29 16:40编辑: www.jxszl.com景先生毕设
使用织梦系统的文档关键字维护,假如增加两个关键字为织梦"和织梦先生",那么在文章中出现织梦先生"这个词的时候,锚文本HTML就会出错,我想这是很多用过这个功能的SEOer见到过的.
在很早以前我就发现过,但是因为自己已经很长时间没有使用织梦系统了,只是这次帮助客户修改时,有这个需求,就在这里

 更多精彩就在: 51免费论文网|www.jxszl.com 
做I.下记录.
需要修改两个函数,都在同I.个文件中(include/arc.archives.class.php),I.个是类Archives中的ReplaceKeyword()函数,另I.个是文件最末尾的_highlight()函数.
修改源码中把织梦原版代码注释掉了,以便比较源码和理解修改思路,源码如下:

0I./**
0II*高亮问题修正,排除alttitle直接的字符替换
0III*
0IV*@paramstring$kw
0V*@paramstring$body
0VI*@returnstring
0VII*/
0VIIIfunctionReplaceKeyword($kw,&$body)
0IX{
I.0global$cfg_cmspath;
I.I.$maxkey=V;
I.II$kws=explode(",",trim($kw));//以分好为间隔符
I.III$i=0;
I.IV$karr=$kaarr=$GLOBALS[replaced=array();
I.V
I.VI//暂时屏蔽超链接
I.VII$body=preg_replace("#()(.*)(<)(/a>)#isU",I.--IV-[-VI,$body);
I.VIII
I.IX//$query="SELECT*FROMkeywordsWHERErpurl<>ORDERBYrankDESC";//原版的
II0$query="SELECT*FROM`keywords`WHERErpurl<>andsta=I.ORDERBYlength(keyword)DESC";//修改优先处理长关键字
III.$this->dsql->SetQuery($query);
IIII$this->dsql->Execute();
IIIIIwhile($row=$this->dsql->GetArray())
IIIV{
IIV$key=trim($row[keyword]);
IIVI$key_url=trim($row[rpurl]);
IIVII$karr[]=$key;
IIVIII$kaarr[]="$key";//删除,增加class属性
IIIX}
III0
IIII.//这里可能会有错误
IIIII//$body=@preg_replace("#(^|>)([^<]+)(?=<|$)#sUe","_highlight(II,$karr,$kaarr,I.)",$body);
IIIIII
IIIIVforeach($karras$key=>$word)
IIIV{
IIIVI$body=preg_replace("/(^|>)([^<]+)(?=<|$)/sUe","_highlight(II,$karr[$key],$kaarr[$key],I.)",$body);
IIIVII//echo$body."
";
IIIVIII//恢复超链接
IIIIX$body=preg_replace("/()/isU",I.>IIIIV0//暂时屏蔽超链接
IVI.$body=preg_replace("/()(.*)(<)(/a>)/isU",I.-]-IV-[-VI,$body);
IVII}
IVIII
IVIV//恢复超链接
IVV$body=preg_replace("#()#isU",I.>IIIIVVIreturn$body;
IVVII}

0I.//高亮专用,替换多次是可能不能达到最多次
0IIfunction_highlight($string,$words,$result,$pre)
0III{
0IVglobal$cfg_replace_num;
0V$string=str_replace(",",$string);
0VIif($GLOBALS[replaced][$words]==I.){
0VIIreturn$pre.$string;
0VIII}
0IXif($cfg_replace_num>0)
I.0{
I.I.//foreach($wordsas$key=>$word)
I.II//{
I.III//if($GLOBALS[replaced][$word]==I.)
I.IV//{
I.V//continue;
I.VI//}
I.VII//$string=preg_replace("#".preg_quote($key)."#",$result[$key],$string,$cfg_replace_num);
I.VIII$string=preg_replace("#".preg_quote($words)."#",$result,$string,$cfg_replace_num);//修改后
I.IXif(strpos($string,$words)!==FALSE)
II0{
III.$GLOBALS[replaced][$words]=I.;
IIII}
IIIII//}
IIIV}
IIVelse
IIVI{
IIVII$string=str_replace($words,$result,$string);
IIVIII}
IIIXreturn$pre.$string;
III0}


原文链接:http://www.jxszl.com/biancheng/dedecms/76249.html