underone的g7系列(v1v2v3v5)一直是我最喜欢的wordpress主题,我现在用的主题就是基于g7v3并做了小的修改。

但是一直以来有个问题困扰我,那就是有时主题会莫名其妙的变形,例如我在这里说过better feed插件就会引起这个问题:

虽然我通过使用copyfeed插件解决了,但这并不是根本上解决。比如我修改主题时,当在header.php里加入了中文也一样会重现这个问题。

昨天说过:“我尝试过很多方法解决,并基本上判定是某个地方的编码不对导致的,到最后还是搞不定”。后来晚上和抽筋儿讨论copyfeed插件时无意之中进到了他的个人blog。并在他的这篇文章启发下,我终于完美解决了这个问题!

感谢抽筋儿和他的blog!就让我从头说起吧……

我在修改wordpress主题或者插件的时候,都是使用windows自带的记事本,只有在文件出现unix换行符时,才会启动的庞大的ultraedit来转换。

最早的时候我发现,有些文件加入中文之后,使用时就会出现乱码而无法正常显示。联想到以前遇到类似的问题,多数是编码不对造成的,所以另存时选择UTF-8而不是ANSI。而使用ultraedit时,另存时会有“UTF-8”和“UTF-8 - 无BOM”两种选择。因为我不知道有什么区别,所以我一般选择UTF-8,和记事本一样的。

一般来说,绝大多数的乱码问题都会因此而解决。而极少数(例如better feed插件)问题虽然解决了,但是会留下主题变形的后遗症。

当我看到抽筋儿的文章时,虽然不是同样的问题,但是里面提到了php文件应该保存为UTF-8无BOM类型,而windows记事本的UTF-8是有BOM的,这就会造成错误。联想到我遇到的问题,觉得很可能和这有关系。

google之后发现,遇到同样或类似问题的人很多。一般来说,php是不支持有BOM的。

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。

何谓BOM?

"EF BB BF" 这三个字节就叫BOM,全称是"Byte Order Mard"。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。

按照前面的解决办法,检测了所有主题文件,结果发现很多问题都是有BOM的。全部去掉之后上传测试,一切正常。再尝试加入中文,还是正常。问题终于得到解决!

随后,我又用同样的方法修改betterfeed插件,果然没有出现问题了。看来真是utf8惹得祸啊。后来我又检查我用过的g7v5主题,因为是同样问题,所以在同样的方法修改之后,问题全部解决了……

附上我修改过g7系列主题全集,除了将全部文件改成了UTF-8无BOM类型外没做任何修改,有需要的就下载吧。

Popularity: 2%

可能还感兴趣

“都是utf8惹得祸,成功解决主题变形问题”有 19 个评论

» 欢迎发表评论发送Trackback

  1. jason

    php对带BOM的utf-8文件处理有问题的

    回复

    Black-Xstar2008-05-02 10:30 下午 回复:

    原来你知道的啊,看来以后这些事情问你就可以了。 :mrgreen:

    回复

  2. 抽筋儿

    呵呵,问题解决了就好。

    回复

    Black-Xstar2008-05-12 6:35 下午 回复:

    不好意思,今天检查akismet时才看到你的留言……
    看来你要给akismet说下,解除自己的黑名单状态。

    回复

  3. 二手科学家

    :smile: 这个问题我以前也曾困惑过!

    回复

    Black-Xstar2008-05-03 11:43 下午 回复:

    原来你们都知道啊……
    话说我在搜索引擎怎么什么都找不到呢?
    难道大家都不分享一下?

    回复

  4. 性感

    恩 这问题时有点闹心 ,知道就好多了

    回复

  5. sand

    多谢,晕头转向了一天,终于从这里找到解决方法。

    纠正下,第7段处把第一个BOM写成了DOM。 :mrgreen:

    回复

    Black-Xstar2008-08-28 4:05 下午 回复:

    呵呵,谢谢提醒。

    回复

  6. underone

    汗啊。。。我都用Editplus存。。。没有找到BOM啊DOM。。。啥的
    看来要换编辑器。。

    回复

    Black-Xstar2008-08-28 8:56 下午 回复:

    居然是传说中的underone啊,稀客稀客……

    回复

    underone2008-08-28 9:57 下午 回复:

    我到处溜达。。。主要潜水。。。
    这个主题基于G7V3?哪里也看不出来阿 。。

    回复

    Black-Xstar2008-08-28 10:02 下午 回复:

    不好意思啊,现在这个已经不是g7v3了,是Xu.hel的一款主题。
    要换换口味嘛,呵呵……

  7. asiapan

    我的所有新建page在IE下查看会变形是不是也因为这个原因?我都是用记事本编辑的代码

    回复

    Black-Xstar2008-10-06 6:38 下午 回复:

    @asiapan, 最好还是用专门的工具来编辑吧。

    回复

» Trackbacks/Pingbacks

  1. Sleeping sand » 启用flyingsand.com (Pingback, 2008-08-28 )

    [...] 在将此主题汉化过程中页面布局出现了很多奇怪的bug,研究了一整天,感谢软件生活,最后终于发现UTF-8编码以是否带BOM( Byte Order Mard)分为两类格式,而不带BOM的UTF-8格式才能得到PHP很好的支持,我用记事本另存为UTF-8的结果恰恰是带了BOM的,赶快找来unifier将这批文件批量转换,问题迎刃而解。 Tag: bom, utf-8, yummyGadget RSS Feed | No comments | trackback [...]

  2. 修改php文件要用UTF-8无BOM编码 at Asiapan Talks (Pingback, 2008-10-06 )

    [...] 下午又狠狠地考虑了一下这个问题,不断地变换关键词进行Google,看到了一篇《都是utf8惹得祸,成功解决主题变形问题》,里面提到他平常修改主题都是用windows自带的记事本,而用记事本修改后保存的php文件只是UTF-8编码,但是一般来说,php是不支持有BOM的,php文件应该保存为UTF-8无BOM类型,而windows记事本的UTF-8是有BOM的,这就会造成错误。 [...]

发表评论