前几天 用dedecms5.7sp1给朋友做了一个站,他想要tag的地址以中文的方式展示
如: http://tem.xxx.com/tags/免费版/
于是给他做了伪静态,然后伪静态时,我把include/taglib/tag.lib.php里边的的
$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";
改成了
?$row['link'] = $cfg_cmsurl."/tags/".($row['keyword'])."/";
把urlencode也去掉了,刚开始在本地是可以的,做完了把网站搬到服务器时,(他的服务器是Linux(centos)的),发现dedecms tag有问题,老是提示:
系统无此标签,可能已经移除!
你还可以尝试通过搜索程序去搜索这个关键字:前往搜索>>
但英文的又可以,我想肯定是编码有问题,上网查了下,果然如此,然后用了以下的方法完美解决了问题!
先在根目录下找到tags.php打开后将以下代码注释掉:
$tag = trim($_SERVER['QUERY_STRING']);
找到上面一行,把他注释了,然后添加这行$tag = strtolower(trim($_SERVER['QUERY_STRING']));这句的意思是判断UTF8编码的字符,如果是UTF8则转换为GBK!此时你再刷新,如果还不行,那么重来!把上面添加的删了,取消注释(不同的服务器可能出现的情况不一样,所以有两种解决办法)
第一步、打开tags.php,在$tag = trim($_SERVER['QUERY_STRING']);下面添加下面的代码,切记是下面,否则不行
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;
}
}
第二步、找到
$tag = FilterSearch(urldecode($tag));
上面添加
if(is_utf8($tag)==1) { $tag = iconv("utf-8","gbk",$tag); }
这个作用就是调用上面的函数判断编码 如果是 utf8则转为gbk!如果你现在保存刷新的话,中文是可以了,但是部分tag还是会出错的,比如:JvavScript SEO 等等这样子的(区分大小写),所以还差最后一步最后一步、把$tag = FilterSearch(urldecode($tag));注释了,添加下面的这行
$tag = urldecode($tag);也就是去掉 FilterSearch();此时、dedecms提示 系统无此标签,可能已经移除!的问题就解决了,还有不懂的可以在下面留言,我会及时的给你们答复!
版权声明: 本站资源均来自互联网或会员发布,如果侵犯了您的权益请与我们联系,我们将在24小时内删除!谢谢!