移除PHP中BOM的方法

來源:互聯網
上載者:User
移除PHP中BOM的方法

Leave a Comment»

PHP...還真麻煩,尤其是在Win主機下

 

  好兄弟友情支援的虛擬機器主機最近老出問題,仔細詢問了緣由,看來還是技術維護人員不到位造成,且伺服器是Win2003+IIS,不穩定之餘對PHP的支援也存在些微的問題.
不想去埋怨什麼,期待早點完成維護即可.

  今天上午挺意外的探索服務器恢複,但我的Movie
Castle頁面顯示卻很奇怪...全屏,且上方多了一行小空行,測試瀏覽器為IE7.然後去Firefox下查看,發現頁面的Width正常,但上方的小空行依然存在-.-

  我是善於Google的人,於是遇到不明白的先詢問這本百科全書. 得到的答案是主題PHP檔案編碼是UTF-8 with
bom造成的,至於這個bom是什麼,看下這個中文解釋吧.

  在UCS 編碼中有一個叫做"ZERO WIDTH NO-BREAK
SPACE"的字元,它的編碼是FEFF。而FFFE在UCS中是不存在的字元,所以不應該出現在實際傳輸中。UCS規範建議我們在傳輸位元組流前,先傳輸 字元"ZERO
WIDTH NO-BREAK
SPACE"。這樣如果接收者收到FEFF,就表明這個位元組流是Big-Endian的;如果收到FFFE,就表明這個位元組流是Little-
Endian的。因此字元"ZERO WIDTH NO-BREAK SPACE"又被稱作BOM。

  UTF-8不需要BOM來表明位元組順序,但可以用BOM來表明編碼方式。字元"ZERO WIDTH NO-BREAK SPACE"的UTF-8編碼是EF
BB BF。所以如果接收者收到以EF BB BF開頭的位元組流,就知道這是UTF-8編碼了。

  Windows就是使用BOM來標記文字檔的編碼方式的。

 

  很顯然...我的小空行是因為這個bom而產生的.

  找到問題後的就是解決問題.去WP群裡問了聲,得到了一些建議,但個人覺得CSS樣式之前在相同的環境下沒有一點問題,沒理由現在突然顯示不了!
還是先解決已知問題吧...Google告訴我了很多去除bom的方法,但操作上來講都有點煩,最後終於找到了個稱心如意滴~muhahaha
一個自動移除bom的小程式...備份後大膽的試用,果然問題立刻解決.

 
  

<?php//remove the utf-8 boms//by magicbug at gmail dot comif (isset($_GET['dir'])){ //config the basedir$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);}?>

 

步驟:

1.Copy代碼到txt文檔中,儲存成php尾碼的檔案,命名為111.php

2.將111.php放在網站根目錄下

3.開啟瀏覽器,執行http://root/111.php

4.一切困擾都解決鳥...空行沒了,CSS樣式也顯示正常了.

 

  撰文留念之...用這個方法可遠比將php檔案一個個另存新檔utf-8 without bom方便呢!!!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.