phpcms内链的原理是用正则匹配不替换的内容,将他用base64的方式进行加密,然后再进行替换,这种方式,如果内链全是中文没有问题,但是如果出现英文或者数字,就会出现乱码
这里六久阁织梦模板网给出解决方案
修改 \caches\caches_model\caches_data\content_output.class.php 里面的_keylinks函数
function _keylinks($txt, $replacenum = '',$link_mode = 1) {
$GLOBALS['replacenum'] = $replacenum;
$txt = preg_replace_callback("#(^|>)([^<]+)(?=<|$)#sU", array($this,"highlight"), $txt);
return $txt;
}并且增加函数highlight
function highlight($mathes)
{
global $replacenum;
$keywords = $this->data['keywords'];
if($keywords) $keywords = strpos(',',$keywords) === false ? explode(' ',$keywords) : explode(',',$keywords);
if($link_mode && !empty($keywords)) {
foreach($keywords as $keyword) {
$linkdatas[] = $keyword;
}
} else {
$linkdatas = getcache('keylink','commons');
}
if($linkdatas) {
$word = $replacement = array();
foreach($linkdatas as $v) {
if($link_mode && $keywords) {
$word1[] = '/(?!(<a.*?))' . preg_quote($v, '/') . '(?!.*<\/a>)/s';
$word2[] = $v;
$replacement[] = '<a href="javascript:;" onclick="show_ajax(this)" class="keylink">'.$v.'</a>';
} else {
$word1[] = '/(?!(<a.*?))' . preg_quote($v[0], '/') . '(?!.*<\/a>)/s';
$word2[] = $v[0];
$replacement[] = '<a href="'.$v[1].'" target="_blank" class="keylink">'.$v[0].'</a>';
}
}
if($replacenum != '') {
foreach ($word2 as $key => $word)
{
$mathes[0] = preg_replace("#".preg_quote($word)."#", $replacement[$key], $mathes[0], $replacenum);
}
} else {
foreach($mathes as $key => $value)
{
$mathes[$key] = str_replace($words, $replacement, $value);
}
}
}
return $mathes[0].$$mathes[1];
}
插件下载说明
未提供下载提取码的插件,都是站长辛苦开发,需收取费用!想免费获取辛苦开发插件的请绕道!
织梦二次开发QQ群
本站客服QQ号:3149518909(点击左边QQ号交流),群号(383578617)
如果您有任何织梦问题,请把问题发到群里,阁主将为您写解决教程!
转载请注明: 织梦模板 » phpcms建站内链乱码问题解决方法



























