1 Comments

解决phpcms内链乱码问题

发布于:2017-03-22  |   作者:admin  |   已聚集:人围观
大家都知道,增加网站内链对于网站SEO是有好处,近期亦秋工作室再帮客户处理phpcms内链的时候发现,phpcms的内链方式是有问题
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:
点击这里给我发消息
飞机