這一段時間一直在對博客的主題進行優化和修改,力圖把主題做到最好。這不昨天就遇到個問題,今天有時間就把這個問題給記錄下來。

由于自己做的主題是基本uft-8編碼方式來編寫的,平時修改模版文件的時候懶的使用專門的網頁編輯器,都是用windows自帶的文本編輯器,所以導致一些亂碼,或是網頁帶有BOM屬性等問題。

BOM簽名解釋:

BOM 是 Byte Order Mark 的縮寫。是UTF編碼方案里用于標識編碼的標準標記,在UTF-16里本來是FF FE,變成UTF-8就成了EF BB BF。這個標記是可選的,因為UTF8字節沒有順序,所以它可以被用來檢測一個字節流是否是UTF-8編碼的。

網頁中的BOM簽名:

在網頁上使用BOM是個錯誤。BOM設計出來不是用來支持HTML和XML的。要識別文本編碼,HTML有charset屬性,XML有encoding屬性,沒必要拉BOM撐場面。雖然理論上BOM可以用來識別UTF-16編碼的HTML頁面,但實際工程上很少有人這么干。畢竟UTF-16這種編碼連ASCII都雙字節,實在不適用于做網頁。

幾個常出現的問題

1.網站打開空白

国产视频app 2.頁面頭部出現多余的空白,或網站源代碼里頭部出現多余的空白

3.網站出現亂碼,如“锘?”等

解決方法:

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

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

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

批量解決方法:

如果網站中所有的或大部份文件需要去掉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.</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); 
} 
?>

把以上代碼保存成一個PHP文件,并上傳到網站服務器的根目錄中,然后訪問此文件。

運行結果如下圖所示

PHP一鍵去除網頁BOM屬性 完美解決網頁亂碼等問題

以上代碼可以檢查網站的所有網頁文件,是否含有BOM簽名,如果有就會去掉此屬性。