->
underone的g7系列(v1、v2、v3和v5)一直是我最喜欢的wordpress主题,我现在用的主题就是基于g7v3并做了小的修改。
但是一直以来有个问题困扰我,那就是有时主题会莫名其妙的变形,例如我在这里说过better feed插件就会引起这个问题:

虽然我通过使用copyfeed插件解决了,但这并不是根本上解决。比如我修改主题时,当在header.php里加入了中文也一样会重现这个问题。
我昨天说过:“我尝试过很多方法解决,并基本上判定是某个地方的编码不对导致的,到最后还是搞不定”。后来晚上和抽筋儿讨论copyfeed插件时无意之中进到了他的个人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: 25%




















php对带BOM的utf-8文件处理有问题的
回复
Black-Xstar 在 2008-05-02 10:30 下午 回复:

原来你知道的啊,看来以后这些事情问你就可以了。
回复
jason 在 2008-05-02 11:20 下午 回复:

回复
Black-Xstar 在 2008-05-02 11:54 下午 回复:

呵呵,问题解决了就好。
回复
Black-Xstar 在 2008-05-12 6:35 下午 回复:

不好意思,今天检查akismet时才看到你的留言……
看来你要给akismet说下,解除自己的黑名单状态。
回复
回复
Black-Xstar 在 2008-05-03 11:43 下午 回复:

原来你们都知道啊……
话说我在搜索引擎怎么什么都找不到呢?
难道大家都不分享一下?
回复
恩 这问题时有点闹心 ,知道就好多了
回复
多谢,晕头转向了一天,终于从这里找到解决方法。
纠正下,第7段处把第一个BOM写成了DOM。
回复
Black-Xstar 在 2008-08-28 4:05 下午 回复:

呵呵,谢谢提醒。
回复
汗啊。。。我都用Editplus存。。。没有找到BOM啊DOM。。。啥的
看来要换编辑器。。
回复
Black-Xstar 在 2008-08-28 8:56 下午 回复:

居然是传说中的underone啊,稀客稀客……
回复
underone 在 2008-08-28 9:57 下午 回复:

我到处溜达。。。主要潜水。。。
这个主题基于G7V3?哪里也看不出来阿 。。
回复
Black-Xstar 在 2008-08-28 10:02 下午 回复:

不好意思啊,现在这个已经不是g7v3了,是Xu.hel的一款主题。
要换换口味嘛,呵呵……
我的所有新建page在IE下查看会变形是不是也因为这个原因?我都是用记事本编辑的代码
回复
Black-Xstar 在 2008-10-06 6:38 下午 回复:

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