Phpcms2008關聯鏈接沖突問題的解決方法
來源:程序員人生 發布時間:2014-03-12 09:43:58 閱讀次數:3943次
最近解決了phpcms2008上的關聯鏈接的小BUG
所用的方法有點特別,雖然公司的老程序員也說關聯鏈接沖突不是這么搞滴,但是管他呢,
黑貓白貓抓到老鼠就是好貓
例如:
< a href="www。yyy.com">做<a href="www。yyy.com">程序</a>是件很有意思的事</a>
在瀏覽器中效果自已試吧,這里不能發鏈接
看到結果了嗎?
很顯然這不是我想要的效果,我期望達到的效果是只顯示比較“長”的詞的鏈接。
解決方案:
找到 根目錄下的
include/global.func.php 文件,找到keylinks 函數,將這個函數替換為:
function keylinks($txt, $replacenum = '')
{
$search = "/(alts*=s*|titles*=s*)["|'](.+?)["|']/ise";
$replace = "_base64_encode('1','2')";
$replace1 = "_base64_decode('1','2')";
$txt = preg_replace($search, $replace, $txt);
$linkdatas = cache_read('keylink.php','',1);
if($linkdatas)
{
$word = $replacement = array();
foreach($linkdatas as $v)
{
$word1[] = '/'.preg_quote($v[0], '/').'/';
$word2[] = $v[0];
$replacement[] = '<a class="keylink" href="'.$v[1].'" target="_blank">'.$v[0].'</a>';
}
if($replacenum != '')
{
$txt = preg_replace($word1, $replacement, $txt, $replacenum);
}
else
{
$txt = str_replace($word2, $replacement, $txt);
}
}
$txts = array();
$txts = split('$v){
if($k!=0){
$txts[$k] = '$v){
if(stripos($v,'')){
$counta++;
}else{
if($counta != 1){
$txts[$k] = preg_replace('//','',$txts[$k]);
$txts[$k] = preg_replace('/<(/)?a(s+.*?)?>/','',$txts[$k],$counta-1,$count);
$counta = $counta-$count;
}
}
}
}
$t = '';
foreach($txts as $v){
$t .= $v;
}
$txt = $t;
$txt = preg_replace($search, $replace1, $txt);
return $txt;
}