Serendipity中文乱码解决方案 (2)

(接上篇“Serendipity的RSS中文乱码解决方案 (1)”)

前言

上篇谈到了如何使用UTF-8编码解决Serendipity的RSS中文乱码问题。但是很多时候,我们用中文网页的时候不喜欢网页编码是UTF-8,而希望直接用GB2312编码。在这种情况下,如何解决RSS乱码的问题呢?

进一步的原因分析

风传Serendipity是几位PHP业界高手联手开发的杰作,因此我们有理由相信这是一套可以作为程序开发范例的系统。因此,在语言国际化方面,不大应该出现编码方面的瑕疵。基于上述考虑,我们有理由相信Serendipity既能支持“Simplified Chinese (UTF-8)”编码,也能支持“Simplified Chinese (GB2312)”编码。实际上,“雪人阁”网站使用的Serendipity就采用的是“Simplified Chinese (GB2312)”编码,而且没有出现乱码问题。

由此,把所有语言选项设置为“Simplified Chinese (GB2312)”编码后,对程序管理界面、数据库等做进一步测试,未发现任何不妥之处。再对出现问题的RSS程序做进一步分析,终于发现问题所在:

默认Serendipity的所有feeds(指RSS、Atom等)都是统一采用UTF-8编码的。因此,当Serendipity系统本身采用其它编码的时候,需要将其它编码的字符串转换成UTF-8编码,再输出到相应的页面中。这个编码转换的工作,是由include/functions.inc.php文件中的一个函数serendipity_utf8_encode()实现的。该函数需要使用iconv函数库,否则将采用utf8_encode()进行编码转换。

因此,如果服务器的PHP嵌入了iconv库的话,那么,就不会有乱码的问题了;但是如果没有嵌入iconv库的话,Serendipity系统将调用utf8_encode()函数,但因为某种原因(不详)调用utf8_encode()后得到的字符串在页面上是乱码的效果。

解决方案(2种):

1. 在服务器上安装iconv库。有关PHP中iconv库的相关信息,参见这里

2. 如果想用GB2312编码,但没有iconv库,则可以将Serendipity系统从多语言/多编码支持转换为单语言支持。具体来讲,就是把rss.php文件中的“2个upf-8”字符串修改为“gb2312”,把include/functions.inc.php文件中的函数serendipity_utf8_encode()改写,让它直接返回输入字符串。其它可能出现乱码的地方用同样的方式处理。目前,qingqing.us就是采用这个做法。

(完)

[补充说明1] 本文原名为《Serendipity的RSS中文乱码解决方案 (2)》,现更名为《Serendipity中文乱码解决方案 (2)》,以便和后续类似文章的命名统一起来。另,本文比较古老,所述内容(以后)可能过时。2006-06-22 20:06:21

[补充说明2] 如欲浏览更多关于Serendipity的使用、维护信息,请参考《网志程序Serendipity中文维护个人文集》一文。2007-07-15 14:23:19

类别:

添加新评论

友情提醒:您的言论自由在本站会得到充分保证;不过,由于广告留言等猖獗,因此本站的内容过滤系统有可能会暂时屏蔽您新发的留言或评论。不便之处,希望理解。