2006年02月9日
BOM (Byte Order Mark) 的問題
如果在 Smarty 中 include 了 UTF-8 格式的檔案,就要小心 BOM (Byte Order Mark) 的問題。
BOM 的由來簡單來說是為了讓一些編輯程式能夠辨認該檔案是不是屬於 Unicode 格式,請參考 憤怒的青蛙: UTF-8, BOM, Micrisoft ,或用 Google 搜尋 UTF-8 BOM ,有更多有用的訊息。
那麼為什麼 BOM 會造成影響呢?因為 BOM 對 HTML 來說是屬於字元,所以 include UTF-8 的檔案時,HTML 就會就會認為被 include 的子樣版上方有個字元,因此就會保留一個空間給它了,就是你們看到那個白白的空行。
補充:這個空白行似乎只有 IE 才會出現。
這種問題也會發生在 PHP 上面,如果有使用 Session 時,常會見到以下情況:
Warning: session_start() [http://www.php.net/manual/en/function.session-start]:
Cannot send session cookie -
headers already sent by (output started at test.php:1) in test.php on line 2
而這也是 BOM 在做怪,原程式如下:
(BOM在這裡,但你看不見它)<?php
session_start();
?>
解決的方式可以改用 EditPlus 、 EmEdit 等可支援無 BOM 之 UTF-8 的文字編輯器,如果是 Dreamweaver MX 2004 的話,在編碼方式選成 Unicode (UTF-8) 時就要將取消「包含 Unicode 簽名 (BOM) 」。

引用URL
http://cgi.blog.roodo.com/trackback/1100799
引用列表:
mfhsieh\'s BLOG: [PDA] Zaurus C760 新手筆記 (35) - UTF-8 and BOM
有關UTF-8 檔案的 BOM (Byte Order Mark) 問題【Hello Fire】
at 2006年07月20日 10:38
剛好看到有人寫了一支UTF-8文件BOM檢測移除
處理整批檔案時滿方便的,如果能跑php可以參考看看。
處理整批檔案時滿方便的,如果能跑php可以參考看看。
Posted by ben
at 2006年10月17日 12:01
