什麼是 BOM頭以及如何去掉

       什麼是 BOM頭?php

      相似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於通常的文件,這樣並不會產生什麼麻煩。但對於 PHP來講,BOM是個大麻煩。html

  PHP並不會忽略BOM,因此在讀取、包含或者引用這些文件時,會把BOM做爲該文件開頭正文的一部分。根據嵌入式語言的特色,這串字符將被直接執行(顯示)出來。由此形成即便頁面的 top padding 設置爲0,也沒法讓整個網頁緊貼瀏覽器頂部,由於在html一開頭有這3個字符呢!瀏覽器

=================================================================================================編輯器

      如何去掉?工具

一、editplus去BOM頭的方法編碼

編輯器調整爲UTF8編碼格式後,保存的文件前面會多出一串隱藏的字符(也便是BOM),用於編輯器識別這個文件是不是以UTF8編碼。 運行Editplus,點擊工具,選擇首選項,選中文件,UTF-8標識選擇 老是刪除簽名,spa

而後對PHP文件編輯和保存後的PHP文件就是不帶BOM的了。.net

二、ultraedit去除bom頭辦法rest

打開文件後,另存爲選項的編碼格式裏選擇(utf-8 無bom頭),肯定就ok了htm

怎麼樣,去掉bom頭很簡單吧

 

三、專門寫的去除文件BOM頭的程序,如今公佈出來,能夠放在項目根目錄,而後運行。

<?php
if (isset($_GET['dir'])){ //設置文件目錄
$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._<a href=http://blog.csdn.net/s394032675>csdn.net</a></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);
}
?>

再來一段議論utf8的BOM信息的BOM是指php文件自己的存儲方式爲帶BOM的UTF-8,普通頁面的中文亂碼方式通常不是由這個緣由致使的。header("Content-type: text/html; charset=utf-8");這句話控制html輸出頁面的編碼方式,BOM只有在WINDOWS下采用「記事本」存儲爲UTF-8時纔會有,這個能夠用WINHEX把開始的2個字節刪掉。在dreamweaver裏面編碼設置裏面能夠設置是否帶BOM,通常只要php輸出的不是圖片(GDI Stream),BOM都不會致使問題。GDI Stream若是開頭有了額外的 字符就會顯示爲 紅叉。

相關文章
相關標籤/搜索