DedeCMS Tags标签提示“系统无此标签,可能已经移除”解决方案

在做完《DedeCMS Tags标签页以及列表分页伪静态实现》之后,余斗发现一个新的问题,就是点击某些标签时,会提示:“系统无此标签,可能已经移除!”。

余斗查询了一下相关资料,原因可能有以下几种,余斗就分情况来给出解决方案:

一、DEDECMS标签中包含“大写字母”

解决方法:

打开网站跟录下的tags.php文件,将代码(大概在第15行):

  $tag = trim($_SERVER[
‘QUERY_STRING’]);

 

修改为:

  $tag = strtolower(trim($_SERVER[
‘QUERY_STRING’]));

 

二、DEDECMS标签中包含中文

出现这个问题的原因是IIS伪静态中文转码为UTF8,解决方法就是在tags.php中加入判断UTF8编码的语句,如果是则转换为GBK,这样就可以解决了。

解决方法:

1.把以下函数代码放在$PageNo = 1;下面,大概在第11行:

   
function is_utf8($tag)

{


if (preg_match(
“/^([“.chr(
228).
“-“.chr(
233).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}){1}/”,$tag) ==
true || preg_match(
“/([“.chr(
228).
“-“.chr(
233).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}){1}$/”,$tag) ==
true || preg_match(
“/([“.chr(
228).
“-“.chr(
233).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}[“.chr(
128).
“-“.chr(
191).
“]{1}){2,}/”,$tag) ==
true)

{


return true;

}


else

{


return false;

}

}

 

2.将代码(大概在第25行):

$tag = FilterSearch(urldecode($tag));

 

修改为:


if(is_utf8($tag)==
1) { $tag = iconv(
“utf-8”,
“gbk”,$tag); }

$tag = urldecode($tag);

 

这个作用就是调用上面的函数判断编码 如果是 utf8则转为gbk。这样就完美解决了标签页的编码问题。