好兄弟友情支持的虛擬主機(jī)最近老出問(wèn)題,仔細(xì)詢問(wèn)了緣由,看來(lái)還是技術(shù)維護(hù)人員不到位造成,且服務(wù)器是Win2003+IIS,不穩(wěn)定之余對(duì)PHP的支持也存在些微的問(wèn)題. 不想去埋怨什么,期待早點(diǎn)完成維護(hù)即可.
今天上午挺意外的發(fā)現(xiàn)服務(wù)器恢復(fù),但我的Movie Castle頁(yè)面顯示卻很奇怪...全屏,且上方多了一行小空行,測(cè)試瀏覽器為IE7.然后去Firefox下查看,發(fā)現(xiàn)頁(yè)面的Width正常,但上方的小空行依然存在-.-
我是善于Google的人,于是遇到不明白的先詢問(wèn)這本百科全書(shū). 得到的答案是主題PHP文件編碼是UTF-8 with bom造成的,至于這個(gè)bom是什么,看下這個(gè)中文解釋吧.
在UCS 編碼中有一個(gè)叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,所以不應(yīng)該出現(xiàn)在實(shí)際傳輸中。UCS規(guī)范建議我們?cè)趥鬏斪止?jié)流前,先傳輸 字符"ZERO WIDTH NO-BREAK SPACE"。這樣如果接收者收到FEFF,就表明這個(gè)字節(jié)流是Big-Endian的;如果收到FFFE,就表明這個(gè)字節(jié)流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。
UTF-8不需要BOM來(lái)表明字節(jié)順序,但可以用BOM來(lái)表明編碼方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開(kāi)頭的字節(jié)流,就知道這是UTF-8編碼了。
Windows就是使用BOM來(lái)標(biāo)記文本文件的編碼方式的。
很顯然...我的小空行是因?yàn)檫@個(gè)bom而產(chǎn)生的.
找到問(wèn)題后的就是解決問(wèn)題.去WP群里問(wèn)了聲,得到了一些建議,但個(gè)人覺(jué)得CSS樣式之前在相同的環(huán)境下沒(méi)有一點(diǎn)問(wèn)題,沒(méi)理由現(xiàn)在突然顯示不了! 還是先解決已知問(wèn)題吧...Google告訴我了很多去除bom的方法,但操作上來(lái)講都有點(diǎn)煩,最后終于找到了個(gè)稱心如意滴~muhahaha 一個(gè)自動(dòng)移除bom的小程序...備份后大膽的試用,果然問(wèn)題立刻解決.
<?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);
}
?>