All in One SEO 是一个进行 Wordprss SEO 优化的插件,它能够重写 Wordprss 页面的 title 以利于搜索引擎收录,但是这个插件有一个 bug 当你使用的 Tag 是中文时,title中显示的第一个字符会是乱码,检查后发现是插件会试图将英文单词第一个字符转成大写,本身中文就是多字节字符,substr再 strtoupper,了解 php 中文处理的人就应该知道肯定会出问题了…
为了解决这个问题我将插件中的 capitalize 方法(function capitalize)修改如下:
[php]
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;
}[/php]
这样 title 就不会出现乱码了。
2007.11.12更新:
我光注意到Tag中文有错误,没注意到分类的title中文也会乱码,感谢 funyfan 提醒。
搜索all_in_one_seo_pack.php中全部的ucwords替换为$this->capitalize,如此即可避免上述问题,其实ucwords做的事情和capitalize方法是一样的,不过ucwords是php原生函数,同样的不支持多字节字符处理。All in One SEO在这个地方的处理思路看起来还是够不统一啊,虽然说一样都有问题,呵呵。
2009.04.17:
新版的 All in One SEO 已经解决了这个问题,我直接升级使用没发现还有乱码了
很庆幸查找到这篇文章。
我碰到相同的问题。
^^很高兴本文能对你有所帮助
我也遇到了。
恩,会引用你的文章,不过现在还在本地折腾,嘿嘿:)
多谢了
[…] 本文来自:https://www.flyinghail.net/?p=64 :all-in-one-seo中文乱码, wordpress插件 目前没有评论 […]
[…] 感謝來自中國的朋友提供解決方案:https://www.flyinghail.net/?p=64 var addthis_pub=”siwu”; […]