帝国cms常见问题:7.5重复关键字替换解决方案和方法

帝国CMS重复关键字替换解决方案使用帝国CMS建站的朋友们都知道帝国CMS系统有一个内容关键字替换的功能,可是随着关键字的增多,问题的来了,那么是什么问题呢!我们来分析一下。

帝国CMS(EmpireCMS)重复关键字替换解决方案l4nECMSPLUS

使用帝国CMS(EmpireCMS)建站的朋友们都知道帝国CMS(EmpireCMS)系统有一个内容关键字替换的功能,可是随着关键字的增多,问题的来了,那么是什么问题呢!我们来分析一下。l4nECMSPLUS

首先给你这么这个关键字:帝国CMS(EmpireCMS)建站,帝国CMS(EmpireCMS),帝国,程序代码如下:l4nECMSPLUS

$str='帝国CMS(EmpireCMS)建站管理系统,最安全的网站建设系统';l4nECMSPLUS
$keyboard = '帝国CMS(EmpireCMS)建站,帝国CMS(EmpireCMS),帝国';l4nECMSPLUS
$kr = explode(',',$keyboard);l4nECMSPLUS
foreach($kr as $v){l4nECMSPLUS
    $str=str_replace($v,'[url=http://www.ecmsplus.com]'.$v.'[/url]',$str);l4nECMSPLUS
}l4nECMSPLUS
输出的结果步骤源代码为:l4nECMSPLUS
1、[url=http://www.ecmsplus.com]帝国CMS(EmpireCMS)建站[/url]管理系统,最安全的网站建设系统l4nECMSPLUS
2、[url=http://www.ecmsplus.com]帝国CMS(EmpireCMS)[/url]建站管理系统,最安全的网站建设系统l4nECMSPLUS
3、[url=http://www.ecmsplus.com]帝国[/url]CMS建站管理系统,最安全的网站建设系统l4nECMSPLUS

从结果我们可以看出,有多个相同的关键字被连续替换了,这样出现的结果是会造成页面的错乱,那么该如何来解决这个问题呢!解决思路如下:l4nECMSPLUS

仔细观察我们发现当中是有一定规律的,它们的规律是:class="infotextkey">关键字,所以我们可以利用这个特性来做一下修改,修改如下:l4nECMSPLUS

$str='帝国CMS(EmpireCMS)建站管理系统,最安全的网站建设系统';l4nECMSPLUS
$keyboard = '帝国CMS(EmpireCMS)建站,帝国CMS(EmpireCMS),帝国';l4nECMSPLUS
$kr = explode(',',$keyboard);l4nECMSPLUS
foreach($kr as $v)l4nECMSPLUS
{l4nECMSPLUS
if(strpos($str,'class="infotextkey">'.$v)==false){ l4nECMSPLUS
$str=str_replace($v,'[url=http://www.ecmsplus.com]'.$v.'[/url]',$str);l4nECMSPLUS
}l4nECMSPLUS
}l4nECMSPLUS

它的原理就是,在第二次替换的时候,先检查一下当前关键字是否已经被替换过一次了,如果没有替换过,就替换。l4nECMSPLUS

啰嗦了这么多,小白可能不耐烦了,想知道在帝国CMS(EmpireCMS)里该如何操作,答案如下:l4nECMSPLUS

1、打开/e/class/functions.php文件,下拉到470行,截图如下:l4nECMSPLUS

帝国CMS(EmpireCMS)7.5重复关键字替换解决方案和方法l4nECMSPLUS

换截图中的函数代码替换成如下代码:l4nECMSPLUS

//替换关键字 UTF-8版l4nECMSPLUS
function ReplaceKey($newstext,$classid=0){l4nECMSPLUS
    global $empire,$dbtbpre,$public_r,$class_r;l4nECMSPLUS
    if(empty($newstext)||$class_r[$classid]['keycid']==-1){return $newstext;}l4nECMSPLUS
    $where='';l4nECMSPLUS
    if(!empty($class_r[$classid]['keycid'])){l4nECMSPLUS
        $where=" where cid='".$class_r[$classid]['keycid']."'";l4nECMSPLUS
    }l4nECMSPLUS
    $sql=$empire->query("select keyname,keyurl from {$dbtbpre}enewskey".$where);l4nECMSPLUS
    while($r=$empire->fetch($sql)){l4nECMSPLUS
        if(strpos($newstext,'class="infotextkey">'.$r[keyname])==false) {l4nECMSPLUS
        if (STR_IREPLACE) {l4nECMSPLUS
            $newstext = empty($public_r[repkeynum]) ? str_ireplace($r[keyname], '<a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>', $newstext) : preg_replace('/' . $r[keyname] . '/i', '<a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>', $newstext, $public_r[repkeynum]);l4nECMSPLUS
        } else {l4nECMSPLUS
            $newstext = empty($public_r[repkeynum]) ? str_replace($r[keyname], '<a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>', $newstext) : preg_replace('/' . $r[keyname] . '/i', '<a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>', $newstext, $public_r[repkeynum]);l4nECMSPLUS
        }l4nECMSPLUS
        }l4nECMSPLUS
    }l4nECMSPLUS
    return $newstext;l4nECMSPLUS
}l4nECMSPLUS

红色字体部分就是我们要添加的,这个方法简单有效。最后再补充一点,是针对GBK编码版本的问题,当你在替换的时候会发现一个非常奇怪的问题,举例如下:l4nECMSPLUS

$str1='有可';l4nECMSPLUS
if (strstr($str1 , '锌')) {l4nECMSPLUS
    echo '找到了!';l4nECMSPLUS
}else{l4nECMSPLUS
    echo '没找到!';l4nECMSPLUS
}l4nECMSPLUS

在GBK编码下做了如下修改://GBK下需要转换编码l4nECMSPLUS

//替换关键字 GBK版l4nECMSPLUS
function ReplaceKey($newstext,$classid=0){l4nECMSPLUS
    global $empire,$dbtbpre,$public_r,$class_r;l4nECMSPLUS
    if(empty($newstext)||$class_r[$classid]['keycid']==-1){return $newstext;}l4nECMSPLUS
    $where='';l4nECMSPLUS
    if(!empty($class_r[$classid]['keycid'])){l4nECMSPLUS
        $where=" where cid='".$class_r[$classid]['keycid']."'";l4nECMSPLUS
    }l4nECMSPLUS
    $sql=$empire->l4nECMSPLUS
    query("select keyname,keyurl from {$dbtbpre}enewskey".$where);l4nECMSPLUS
    $newstext2 = iconv('GBK','UTF-8',$newstext);l4nECMSPLUS
    while($r=$empire->fetch($sql)){l4nECMSPLUS
        if (strpos($newstext2 , iconv('GBK','UTF-8',$r[keyname])) !== false) {l4nECMSPLUS
            if (strpos($newstext, 'class="infotextkey">' . $r[keyname]) == false) {l4nECMSPLUS
                if (STR_IREPLACE) {l4nECMSPLUS
                    $newstext = empty($public_r[repkeynum]) ? str_ireplace($r[keyname], 'l4nECMSPLUS
                    <a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>l4nECMSPLUS
                    ', $newstext) : preg_replace('/' . $r[keyname] . '/i', 'l4nECMSPLUS
                    <a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>l4nECMSPLUS
                    ', $newstext, $public_r[repkeynum]);l4nECMSPLUS
                } else {l4nECMSPLUS
                    $newstext = empty($public_r[repkeynum]) ? str_replace($r[keyname], 'l4nECMSPLUS
                    <a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>l4nECMSPLUS
                    ', $newstext) : preg_replace('/' . $r[keyname] . '/i', 'l4nECMSPLUS
                    <a href=' . $r[keyurl] . ' target=_blank class=infotextkey>' . $r[keyname] . '</a>l4nECMSPLUS
                    ', $newstext, $public_r[repkeynum]);l4nECMSPLUS
                }l4nECMSPLUS
            }l4nECMSPLUS
    }l4nECMSPLUS
}l4nECMSPLUS
return $newstext;l4nECMSPLUS
}l4nECMSPLUS

至此完毕。l4nECMSPLUS

如下示例代码:

<p>$str=&#39;帝国CMS建站管理系统,最安全的网站建设系统&#39;;<br />$keyboard = &#39;帝国CMS建站,帝国CMS,帝国&#39;;<br />$kr = explode(&#39;,&#39;,$keyboard);<br />foreach($kr as $v){<br />&nbsp; &nbsp; $str=str_replace($v,&#39;[url=http://www.dgmoban.com]&#39;.$v.&#39;[/url]&#39;,$str);<br />}<br />输出的结果步骤源代码为:<br />1、[url=http://www.dgmoban.com]帝国CMS建站[/url]管理系统,最安全的网站建设系统<br />2、[url=http://www.dgmoban.com]帝国CMS[/url]建站管理系统,最安全的网站建设系统<br />3、[url=http://www.dgmoban.com]帝国[/url]CMS建站管理系统,最安全的网站建设系统</p>
分享到 :
相关推荐

发表评论

登录... 后才能评论

评论(3)

加入本站VIP会员订阅计划,海量资源免费下载查看

目前为止共有3位优秀的VIP会员加入!

立即加入VIP会员