好兄弟友情支持的虛擬主機最近老出問題,仔細詢問了緣由,看來還是技術維護人員不到位造成,且服務器是Win2003+IIS,不穩(wěn)定之余對PHP的支持也存在些微的問題. 不想去埋怨什么,期待早點完成維護即可.

  今天上午挺意外的發(fā)現(xiàn)服務器恢復,但我的Movie Castle頁面顯示卻很奇怪...全屏,且上方多了一行小空行,測試瀏覽器為IE7.然后去Firefox下查看,發(fā)現(xiàn)頁面的Width正常,但上方的小空行依然存在-.-

  我是善于Google的人,于是遇到不明白的先詢問這本百科全書. 得到的答案是主題PHP文件編碼是UTF-8 with bom造成的,至于這個bom是什么,看下這個中文解釋吧.

  在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的編碼是FEFF。而FFFE在UCS中是不存在的字符,所以不應該出現(xiàn)在實際傳輸中。UCS規(guī)范建議我們在傳輸字節(jié)流前,先傳輸 字符"ZERO WIDTH NO-BREAK SPACE"。這樣如果接收者收到FEFF,就表明這個字節(jié)流是Big-Endian的;如果收到FFFE,就表明這個字節(jié)流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。

  UTF-8不需要BOM來表明字節(jié)順序,但可以用BOM來表明編碼方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF BB BF。所以如果接收者收到以EF BB BF開頭的字節(jié)流,就知道這是UTF-8編碼了。

  Windows就是使用BOM來標記文本文件的編碼方式的。

 

  很顯然...我的小空行是因為這個bom而產生的.

  找到問題后的就是解決問題.去WP群里問了聲,得到了一些建議,但個人覺得CSS樣式之前在相同的環(huán)境下沒有一點問題,沒理由現(xiàn)在突然顯示不了! 還是先解決已知問題吧...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);
}
?>