WordPress插件All in One SEO中文乱码解决方法

分享到: 更多

一、All in One SEO作用

All in One SEO 是一个进行 Wordprss SEO 优化的插件,它能够重写 Wordprss 页面的 title 以利于搜索引擎收录。

二、All in One SEO中文乱码原因

但是这个插件有一个 bug 当你使用的 Tag 是中文时,title中显示的第一个字符会是乱码,原因是插件会试图将英文单词第一个字符转成大写,本身中文就是多字节字符,substr再 strtoupper,这样就会出现问题。

三、解决办法

如果第一个字母是英文则处理,否则不处理

将插件中的 capitalize 方法(function capitalize)修改如下:

function capitalize($s)
{
$s = trim($s);
$tokens = explode(' ', $s);
for ($i = 0, $n = count($tokens); $i <$n; $i++)
{
$matches = array();
preg_match('/^(.{1})(.*)$/us', $tokens[$i], $matches);
$tokens[$i] = strtr($matches[1], 'abcdefghijklmnopqrstuvwxyz', 'ABCDEFGHIJKLMNOPQRSTUVWXYZ') . $matches[2];
}
$s = implode(' ', $tokens);
return $s;
}

四、后话

分类的title中文也会乱码,可以将Capitalize Category Titles这个选项关掉(即不处理分类首字母大写问题)。

或者搜索all_in_one_seo_pack.php中全部的ucwords替换为$this->capitalize,如此即可避免上 述问题,其实ucwords做的事情和capitalize方法是一样的,不过ucwords是php原生函数,同样的不支持多字节字符处理。

Leave a Reply

Google AdWords