移除PHP中BOM的方法
PHP...还真麻烦,尤其是在Win主机下
好兄弟友情支持的虚拟主机最近老出问题,仔细询问了缘由,看来还是技术维护人员不到位造成,且服务器是Win2003+IIS,不稳定之余对PHP的支持也存在些微的问题. 不想去埋怨什么,期待早点完成维护即可.
今天上午挺意外的发现服务器恢复,但我的Movie Castle页面显示却很奇怪...全屏,且上方多了一行小空行,测试浏览器为IE7.然后去Firefox下查看,发现页面的Width正常,但上方的小空行依然存在-.-
我是善于Google的人,于是遇到不明白的先询问这本百科全书. 得到的答案是主题PHP文件编码是UTF-8 with bom造成的,至于这个bom是什么,看下这个中文解释吧.
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。
很显然...我的小空行是因为这个bom而产生的.
找到问题后的就是解决问题.去WP群里问了声,得到了一些建议,但个人觉得CSS样式之前在相同的环境下没有一点问题,没理由现在突然显示不了! 还是先解决已知问题吧...Google告诉我了很多去除bom的方法,但操作上来讲都有点烦,最后终于找到了个称心如意滴~muhahaha 一个自动移除bom的小程序...备份后大胆的试用,果然问题立刻解决.
<?php //remove the utf-8 boms //by magicbug at gmail dot com if (isset($_GET['dir'])){ //config the basedir $basedir=$_GET['dir']; }else{ $basedir = '.'; } $auto = 1; checkdir($basedir); function checkdir($basedir){ if ($dh = opendir($basedir)) { while (($file = readdir($dh)) !== false) { if ($file != '.' && $file != '..'){ if (!is_dir($basedir."/".$file)) { echo "filename: $basedir/$file ".checkBOM("$basedir/$file")." <br>"; }else{ $dirname = $basedir."/".$file; checkdir($dirname); } } } closedir($dh); } } function checkBOM ($filename) { global $auto; $contents = file_get_contents($filename); $charset[1] = substr($contents, 0, 1); $charset[2] = substr($contents, 1, 1); $charset[3] = substr($contents, 2, 1); if (ord($charset[1]) == 239 && ord($charset[2]) == 187 &&ord($charset[3]) == 191) { if ($auto == 1) { $rest = substr($contents, 3); rewrite ($filename, $rest); return ("<font color=red>BOM found,automatically removed.</font>"); } else { return ("<font color=red>BOM found.</font>"); } } else return ("BOM Not Found."); } function rewrite ($filename, $data) { $filenum = fopen($filename, "w"); flock($filenum, LOCK_EX); fwrite($filenum, $data); fclose($filenum); } ?>
步骤:
1.Copy代码到txt文档中,保存成php后缀的文件,命名为111.php
2.将111.php放在网站根目录下
3.打开浏览器,执行http://root/111.php
4.一切困扰都解决鸟...空行没了,CSS样式也显示正常了.
撰文留念之...用这个方法可远比将php文件一个个另存为utf-8 without bom方便呢!!!










2008.05.06 8:01 下午
yeah,congratulation your blog come back!
how about we get a relationship?(add blogroll each other)
[回复]
Yacca reply on 2008.05.06:
no problem, done~~~^^
[回复]
chada reply on 2008.05.08:
The moment I saw "how about we get a relationship?":(shocked) wat? yacca is a gay?!!!
haha~then I saw "blogroll" I knew that I've made a mistake^^
[回复]
Yacca reply on 2008.05.08:
...faint-.-
2008.05.06 10:25 下午
done!
[回复]
2008.05.07 1:32 上午
下个插件,把地址中的index.php去掉
[回复]
Yacca reply on 2008.05.07:
搜索不到...用了插件后会不会引起之前的链接失效呢?还是会自动跳转的!?
[回复]
chada reply on 2008.05.08:
还是不要更换了,毕竟已经做了一段时间了,更改之后会造成大量搜索引擎死链接,对排名不利。
Yacca reply on 2008.05.08:
不换...主要是觉得这没什么-.-
2008.05.07 1:53 上午
我用FF, CSS貌似不正常耶
[回复]
Yacca reply on 2008.05.07:
-o- 现在呢...昨晚是夸张的可以 我发现了的
walle的文章都发了4篇...靠.
[回复]
schuen reply on 2008.05.09:
现在ok了..
Yacca reply on 2008.05.09:
恩那 去数据库里直接删的...-.-
2008.05.07 9:16 上午
怎么侧边栏 去下面了啊 可能是内容中宽度的原因
[回复]
Yacca reply on 2008.05.07:
嗯...代码.
代码是wlw生成的,无法自动换行-.-
[回复]
2008.05.07 9:22 上午
赶快换LIUNX服务器吧。
我开头也装载我的 WIN虚拟主机下 结果问题 多多 可视化编辑和上传都不能正常使用。。。
[回复]
Yacca reply on 2008.05.07:
-o- 看机会吧,再挂个一天时,和兄弟开口说迁移...
[回复]
2008.05.07 12:18 下午
Linux Apache服务器可以通过.htaccess文件的rewrit功能实现,这个应该在安装的时候都会西东把规则写到.htaccess里面去的。
所以看来你的应该是Windows的服务器。之前我也有个博客是这样的,我也没在意,突然有一天我修改了永久链接的格式,所以以前的链接全失效了。网上有人说有一个301转向的插件,我装了可以用,就是把原来的链接全转向到新的链接上面去,两个链接都可以访问,那个插件还有两个附属的功能关于www和不带www都能访问的,以及去index.php的。
但是很遗憾,现在找不到了。我刚刚找了半天也没有找到。
[回复]
Yacca reply on 2008.05.07:
那算了吧...这url是长了点,但这么久下来了,习惯鸟~~^^
[回复]
lxltop reply on 2008.05.07:
其实你说的那个插件就是这个,是一个不错的插件,我也启用了的。
http://www.imxl.net/tattleskill/wordpress-25-bug/
[回复]
Yacca reply on 2008.05.07:
去你那里瞄了眼,知道这是什么了...之前看到过的
2008.05.07 3:19 下午
不错不错。收藏咯~
我现在用FIREFOX访问你的网站。发现宽度还是有问题哦。
[回复]
Yacca reply on 2008.05.07:
我这里是ff...1280*800的分辨率...
没问题-.-
[回复]
2008.05.07 3:47 下午
我现在用和大猫他们合租的服务器 感觉不错。。。
你问他看看。。
[回复]
Yacca reply on 2008.05.07:
大猫幸福的和小fhappy呢...
也就是说 你和大猫 小f合租...
[回复]
homer reply on 2008.05.07:
哈哈 貌似 偶也不管了 反正他那出问题了我这里也差不多也完蛋,他如果有解决方案我就跟着他来。省时又省力哈哈。。
Yacca reply on 2008.05.08:
省力...免费的技术维护
2008.05.07 4:05 下午
什么插件可以把URL中的INDEX.php去掉啊 ?
一直想去掉它。。。。。。
[回复]
Yacca reply on 2008.05.07:
Permalink Redirect WordPress Plugin
...地址上面给出了.
[回复]
2008.05.07 5:00 下午
恩,这个问题曾经困扰过我。。。
[回复]
Yacca reply on 2008.05.07:
别困扰这种东西么,不碍眼的.
[回复]
2008.05.08 7:31 上午
收藏之,说不定哪天就用到了,哇呜哇呜
[回复]
Yacca reply on 2008.05.08:
^^
[回复]