北京北大青鳥學校學術部老師發現,在指導同學們用utf-8編碼做網站時,很多同學都會遇到IE下莫名其妙的空出一行,大家用肉眼看不見,也就是 UTF-8 BOM 簽名了,更多 BOM 知識請查找“Unicode BOM”。這種情況該怎么辦?我們不妨看看北大青鳥學員:周曉麗同學是如何做的。
先介紹一下項目架構:IIS + .net 2.0 + SSI
暫且不討論為什么要用 SSI,而不用其它技術(如 UserControl)
生成 index.shtml 肯定要帶 BOM,其實帶不帶也不會影響頁面上會出現空白行。
index.shtml 內容如下:
< html>
< body>
< !--#include file=head.shtml-->
< /body>
< /html>
1、head.shtml 保存為 UTF-8 帶 BOM 時,會出現空白行(頁面元素當然不止這些)。
2、head.shtml 保存為 UTF-8 不帶 BOM 時,會出現亂碼,因為 SSInc.dll 加載這個文件時,不知道文件的編碼(因為沒有 BOM 簽名),因此會按 GBK 來加載文件,最后亂碼。所以,正也不行,反也不行,只有最后一招了。(北京北大青鳥學校)
改 index.shtml 為:
< html>
< body>
< !--<!--#include file=head.shtml-->
< /body>
< /html>
在 head.shtml 的頁開頭加上
<!--BOM-->
內容。
意圖將 <!--#include 前的 <!-- 和 head.shtml 里的 BOM--> 用HTML注釋掉,在 asp 下應該沒有問題。
2年前,用 asp.net include 就發現一個問題,就是它的解釋方法和 asp 完全不同,不信可以試試
< !--<!--#include file=head.shtml-->執行結果等效于
< !--#include file=head.shtml-->
又試了半個小時,發現
< !--#<!--#include file=head.shtml-->
被忽略,期待更好的解決方案。北京北大青鳥學校提供。