PHP一鍵去除網(wǎng)頁BOM屬性, 完美解決網(wǎng)頁頭部空白或亂碼問題

問題:

模板文件生成html文件之后會在body開頭處加入一個可見的控制符&#65279,導(dǎo)致頁面頭部會出現(xiàn)一個空白行。原因是頁面的編碼是UTF-8 + BOM。

問題原因:

這種編碼方式一般會在windows操作系統(tǒng)中出現(xiàn),比如windows自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。

它是一串隱藏的字符,用于讓記事本等編輯器識別這個文件是否以UTF-8編碼。對于一般的文件,這樣并不會產(chǎn)生什么麻煩。但對于 PHP來說,BOM是個大麻煩。因為PHP并不會忽略BOM,所以在讀取、包含或者引用這些文件時,會把BOM作為該文件開頭正文的一部分。

根據(jù)嵌入式語言的特點,這串字符將被直接執(zhí)行(顯示)出來。由此造成即使頁面的 top padding 設(shè)置為0,也無法讓整個網(wǎng)頁緊貼瀏覽器頂部,因為在html一開頭有這3個隱藏字符&#65279!

導(dǎo)致的問題:

1.網(wǎng)站打開空白

2.頁面頭部出現(xiàn)多余的空白

3.網(wǎng)站出現(xiàn)亂碼,如“锘?”

解決方法一:使用編輯器修改文件編碼格式

1.選用專業(yè)的編輯器,例如 notepad++,sublime,editplus 這樣不會自動簽名。

2.sublime通過如下操作File -> Save with Encoding -> UTF-8保存后即可去除 bom

3.notepad++選中格式 -> 以 UTF-8 格式編碼選項即可去除

解決方法二:使用代碼將網(wǎng)站中BOM都清除

然而有的是整個網(wǎng)站中有些文件存在 BOM 屬性,由于網(wǎng)站程序的龐大,所以并不可能手動挨個檢查排除修復(fù),所以就發(fā)現(xiàn)了一個極為好用的 PHP 程序。

?。?!通過此段代碼可以快速將網(wǎng)站中的bom清除掉

使用方法:復(fù)制下面代碼到一個新建的 delbom.txt 的文件中,上傳到網(wǎng)站根目錄,然后將 delbom.txt 改為 delbom.php,最后直接前臺訪問該文件即可。
代碼:

<?php 
if (isset($_GET['dir'])){ //設(shè)置文件目錄
$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); 
} 
?>

這是執(zhí)行效果

delbom
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容