声明:本文部分内容来自网络,笔者进行了汇总和整理。来源已经做了链接,见下文。

 

1. Tags 第一个字符出现乱码

通常是因为安装或者升级了 All in One SEO 插件,或者是Platinum SEO Pack插件。

插件中会设置tags的第一个字符大写,而一个汉字等于两个西文字符,所以就会将第一个汉字的一半大写,造成了乱码。

解决方法(以All in One SEO 插件为例,来源网址):

1. 最简单的解决办法就是:进入Seo Pack设置,将Rewrite Title选择框取消选择,这样Seo Pack就不会重写标题,标题显示为Wordpress默认标题,就不会出现乱码了。

2. 如果想使用Seo Pack的标题重写功能,那么就需要修改Seo Pack的代码,将其中存在bug的地方修改掉,步骤如下:
进入插件->编辑,选择编辑All In One Seo Pack (SEO插件), 然后选择编辑文件:aioseop.class.php,(这样很难找到下面这个函数,还是将插件目录下面这个文件下到本地编辑吧)

找到函数:
function capitalize($s)
将下面的一行代码删除或注释掉:
$tokens[$key] = strtoupper(substr($tokens[$key], 0, 1)) . substr($tokens[$key], 1);
然后,将此文件中的函数:ucwords全部替换为:$this->capitalize

 

2. 目录第一个字符出现乱码

这个错误和插件无关,和WordPress的新版本对中文支持不太好有关

解决方法(来源网址):

打开wp-includes文件下的class-wp.php文件,搜索下一行代码(第142行)

1 $pathinfo $_SERVER['PATH_INFO'];

注释掉,另起一行加入下面代码(如果您想直接替换,也未尝不可):

1 $pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], "UTF-8""GBK");

搜索下面代码,定位到第148行(因为上面加入了一行代码,如果class-wp.php从未修改过,那就是148-1=147行)

1 $req_uri $_SERVER['REQUEST_URI'];

注释掉。另起一行,加入如下代码:

1 $req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], "UTF-8""GBK");

保存,二进制方式上传到服务器。看看你的中文链接、中文TAGS、中文标签是不是正常打开了?

 

3. PageNavi 导致wordpress 3.2.1中文地址分页乱码,中文标签分页无法打开

解决方法:(来源网址
找到插件目录wp-content/plugins/wp-pagenavi/下的core.php文件,搜索下面代码(164行)
1 return "<a href='" . esc_url( get_pagenum_link( $page ) ) ."' class='$class'>$text</a>";

注释掉,另起一行加入

1 return "<a href='" . esc_url( mb_convert_encoding(get_pagenum_link($page), "UTF-8""GBK") ) ."' class='$class'>$text</a>";

保存,二进制方式上传到服务器。测试一下你的中文分页,应该可以正常打开了。

 

4.使用all-in-one-seo-pack插件, 当Tags页面出现404错误时,title的中文出现乱码

找到插件目录wp-content/plugins/all-in-one-seo-pack/下的aioseop.class.php文件,搜索下面代码
1 } else if (is_404()) {

有两处,623行 806行,以623行为例,原代码如下


修改成

806行,做类似改动。

 

5. 部分中文tags点击后显示404错误

正常安装wordpress,解决了上述问题后,你会发现绝大多数中文tags是正常的。但极少数中文tags显示不正常。例如:标  /  加  等。这是由于preg_match判断中文的表达式出错。

解决方法:

在wp-include/query.php文件中,寻找 function parse_tax_query()函数,里面有一句:

} else if ( preg_match(‘/[+\s]+/’, $q['tag']) || !empty($q['cat']) ) {

if ( preg_match(‘/[+\s]+/’, $q['tag']) || !empty($q['cat']) )

其中 Preg_match 函数判断中文的时候,出现错误。应该将上述红色字部分更换为

preg_match(‘/\+/’, $q['tag'])

mb_eregi(‘/[+\s]+/’, $q['tag'])

做了上述修改后,所有中文tags点击后均正常。

 

 

6. 搜索部分中文字符,显示404错误

使用搜索功能,部分中文字符出现404错误,原因和上面一样,由于preg_match判断中文的表达式出错。

解决方法:

在wp-include/query.php文件中,寻找 function &get_posts函数,里面有一句:

preg_match_all(‘/”.*?(“|$)|((?<=[\\s",+])|^)[^\\s",+]+/’, $q['s'], $matches);

其中 Preg_match_all 函数判断中文的时候,出现错误。应该将上述红色字部分更换为

preg_match_all(‘/”.*?(“|$)|((?<=[\\s",+])|^)[^\+]+/’, $q['s'], $matches);

做了上述修改后,所有中文搜索时均正常。

 

作者: 谭砚耘@用户体验与可用性设计-科研笔记

版权属于: 谭砚耘 (TOTHETOP至尚国际 )

版权所有。转载时必须以链接形式注明作者和原始出处

http://www.webusability.cn/several-solutions-about-chinese-messy-code-521/

如果你希望与作者交流,请发送邮件到 tanyanyun/at/163.com 别忘了修改小老鼠