WordPress搭建的博客或网站常出现一个问题就是中文tag链接不存在,google管理员工具提示抓取404错误,特别是Windows主机常出现中文标签链接抓取错误,中文标签不能正常显示;或者中文标签能够正常显示,但是点击链接后即出现404错误,给用户带来非常大的不便,极大降低了网站的友好性。
打开 WP-include/classes.php(3.1之前版本)或WP-include/class-wp.php(3.1+之后版本,下文称新版),然后在最新版WORDPRESS系统里面,里面搜索找到:
然后分别利用下面两句替换即可;
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO">, 'UTF-8', 'GBK');
和
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI">, 'UTF-8', 'GBK');
经本人亲测,本方法可用,新版本的语句与以上可能有出入,但是方法基本相同的,将其中的相应语句替换即可。
=====================================================================================
部分版本通过上述修改过后会出现以下两种情况;
1、出站链接即跳转到第三方网站的链接无法正常跳转,而出现404报错;
2、站内搜索无法使用;
针对这个问题,我们测试发现以下两段修改替换代码可以完美解决此问题,在这里以wordpress最新版本为例;
找到下面这行代码:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] :
将其修改为:
$pathinfo = isset( $_SERVER['PATH_INFO'] ) ? mb_convert_encoding($_SERVER['PATH_INFO'], 'utf-8', 'GBK') : '';
再找到如下代码——就在上一行附近,各种版本有所不同,大概在160~190行之间。
list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] );
将代码替换为:
list( $req_uri ) = explode( '?', mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8', 'GBK') );
这里用到了PHP的mb_convert_encoding函数,其实就是转码。把UTF8转为GBK。在显示出来,语法如下:
mb_convert_encoding($filename, "GB2312", "UTF-8");//将utf-8 格式的filename的转 gb2312
需要注意的是,这个需要PHP的 mbstring扩展。所以,如果你修改后报错,记得加载这个扩展。