织梦DedeCMS 5.7“系统无此标签,可能已经移除”解决方法
dedecms5.7sp1给朋友做了一个站,他想要tag的地址以中文的方式展示
比如http://www.itbyc.com/tags?php/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E%E4%BC%98%E5%8C%96/
显示为:http://www.itbyc.com/tags/织梦系统/
于是给他做了伪静态,然后伪静态时,我把include/taglib/tag.lib.php里边的的$row['link'] = $cfg_cmsurl."/tags.php?/".urlencode($row['keyword'])."/";
改成了
把urlencode也去掉了,刚开始在本地是可以的,做完了把网站搬到服务器时,(他的服务器是Linux(centos)的),发现dedecms tag有问题,老是提示:
系统无此标签,可能已经移除! 你还可以尝试通过搜索程序去搜索这个关键字:前往搜索>>
试了好多方法还是不行!
但英文的又可以,我想肯定是编码有问题,上网查了下,果然如此,然后用了以下的方法完美解决了问题!
解决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));注释了,添加下面的这行
也就是去掉 FilterSearch();此时、dedecms提示 系统无此标签,可能已经移除!的问题就解决了。