移除utf8+BOM格式的html文件頭有一行空格的問題

最近在改模板時,發現頁面最開頭地方多了一行空白行,真是苦撒老夫,查看源碼出現&#65279,這是什麼鬼??

 究其原因,是文件格式的問題,保存時一不小心保存爲了utf8+bom格式了,

什麼事bom:

這種編碼方式一般會在windows操作系統中出現,比如WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不

可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於一般的文件,這樣並不會產生

什麼麻煩。但對於 PHP來說,BOM是個大麻煩。因爲PHP並不會忽略BOM,所以在讀取、包含或者引用這些文件時,會把BOM作爲該文件開頭正文的一部分。

根據嵌入式語言的特點,這串字符將被直接執行(顯示)出來。由此造成即使頁面的 top padding 設置爲0,也無法讓整個網頁緊貼瀏覽器頂部,因爲在html一

開頭有這3個隱藏字符&#65279。

然而,在一大堆require文件中找那個文件保存爲這種格式,也不容易,程序員嗎,程序解決。

將代碼放到網站根目錄,運行,解決。

代碼如下:

<?php
 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); 
}
 if (isset($_GET['dir'])){ //config the basedir 
   $basedir=$_GET['dir']; 
 }else{ 
   $basedir = '.'; 
 } 
  
 $auto = 1; 
   
 checkdir($basedir); 

比起,一個個改文件,的確省事吧!!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章