Skip to content


WordPress Popular Posts插件2.1.3版乱码问题

今天登陆blog后台,发现Wordpress Popular Posts有了更新,于是小手抖了一下。这一抖抖出了麻烦,更新后在插件中显示的中文标题全部乱码。由于急得去考试,顾不上这些了,乱就乱着吧。考完试回来发现并没有新的更新,看来只好自己来解决。

最初怀疑是php文件编码的问题,以前也遇到过。可是将插件目录下php文件全不转换为UTF-8格式后问题并没有改变。看来问题在于插件程序本身的问题,而最有可能出问题的是获取文章标题的代码。找到2.1.3版中获取文章标题的代码:
// get post title
/* qTranslate integration check */
($this->qTrans) ? $tit = qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage($wppost->post_title) : $tit = $wppost->post_title;
$tit = stripslashes($tit);
$title_attr = htmlentities($tit, ENT_QUOTES);
if ( $instance['shorten_title']['active'] && (strlen($tit) > $instance['shorten_title']['length'])) {
$tit = mb_substr($tit, 0, $instance['shorten_title']['length'], 'UTF-8') . "...";
}
$tit = htmlentities($tit, ENT_QUOTES);

与之前的代码稍作对比发现问题出在了htmlentities()这个函数上,以前用的是htmlspecialchars()。这个两个函数的作用都是将字符转换为 HTML 实体。不过二者还是有一些差别:

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

  • & (和号) 成为 &
  • ” (双引号) 成为 "
  • ‘ (单引号) 成为 '
  • < (小于) 成为 &lt;
  • > (大于) 成为 &gt;

htmlentities() 函数把字符转换为 HTML 实体。

这两个函数在处理英文字符时可能区别不大,不过在处理中文字符是就有天壤之别了。htmlentities() 会连同中文字符一块转换成HTML 实体,结果就是在浏览器中看到的一堆乱码。

既然找到了问题,解决方法就很简单了。找到相应代码,将htmlentities替换为htmlspecialchars即可。

对比了一下2.1.x之前的版本发现作者对这个部分做了较大的修改。作者肯定是忽略了这个问题,或许是由于作者平时更不不接触中文的缘故吧。希望作者能尽快收到反馈,在此之前就通过此法改改先用吧。

  • Google Buzz
  • Google Gmail
  • Blogger Post
  • Twitter
  • Google Bookmarks
  • Share/Bookmark

Posted in wordpress.

Tagged with .


0 回复

如果关注本文发展,欢迎订阅本文评论 RSS feed.



评论中可以使用HTML(点此看详情)

或是使用 引用通告(trackback).