搜尋

PHP去除BOM頭

Nov 08, 2016 pm 05:25 PM

      BOM: Byte Order Mark UTF-8 BOM又叫UTF-8 簽章,其實UTF-8 的BOM對UFT-8沒有作用,是為了支援UTF-16 ,UTF-32才加上的BOM,BOM簽名的意思就是告訴編輯器當前文件採​​用何種編碼,方便編輯器識別,但是BOM雖然在編輯器中不顯示,但是會產生輸出,就像多了一 個空白行, 如果您在修改任何PHP檔案後發生: 不能登入或不能登出; * 頁頂出現一條空白; * 頁頂出現錯誤警告;  其它不正常的情況。則多半是編輯器的問題。

      本程式採用UTF-8編碼。現在幾乎所有的文字編輯軟體都可以顯示並編輯UTF- 8編碼的文件。但很遺憾,其中許多軟體的表現並不理想。類似WINDOWS自帶的記事本等軟體,在保存一個以UTF- 8編碼的檔案時,會在檔案開始的地方插入三個不可見的字元(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符 ,用於讓記事本等編輯器識別這個檔案是否以UTF-8編碼。    

        對於一般的文件,且不會造成任何麻煩。但對於 PHP來說,BOM是個大麻煩。 PHP不會忽略BOM ,所以在讀取、包含或引用這些文件時,會把BOM當作該文件開頭正文的一部分。根據嵌入式語言的特點,這串字元將會直接執行(顯示)出來。由此造成即使頁面的 top padding 設定為0,也無法讓整個網頁緊貼瀏覽器頂部,因為在html一開頭有這3個字元呢!最大的麻煩還不是這個。受COOKIE送出機制的限制,在 這些檔案開頭已經有BOM的檔案中,COOKIE無法送出(因為在COOKIE送出前PHP已經送出了檔案頭),所以登入和登出功能失效。一切都依賴COOKIE、SE SSION實作的功能全部無效。    

        因此,並在編輯、變更任何文字檔案時,請務必使用不會亂加BOM的編輯器。 Linux下的編輯器應該都沒有這個問題。 WINDOWS下, 請勿使用記事本等編輯器。建議的編輯器有: Editplus 2.12版本以上; EmEditor; UltraEdit(需要取消『新增BOM』的相關選項); Dreamweaver(需要取消『新增BOM』的相關選項) 等。對於已經新增了BOM的文件,要取消的話,可以用以上編輯器另存一次。 (Editplus需要先另存為g​​b,再另存為UTF-8。) ,以下是程式解決方案:

[PHP]程式碼

<?php
 
$auto = 1;
checkdir(&#39;C:\project\weibo&#39;);
function checkdir($basedir){
if ($dh = opendir($basedir)) {
  while (($file = readdir($dh)) !== false) {
    if($file{0} == &#39;.&#39;)
    {
        continue;
    }
   if ($file != &#39;.&#39; && $file != &#39;..&#39;){
    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);
}
?>


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。