北大青鳥學(xué)校:如何處理asp.net中include UTF8的垃圾問題

北京北大青鳥學(xué)校學(xué)術(shù)部老師發(fā)現(xiàn),在指導(dǎo)同學(xué)們用utf-8編碼做網(wǎng)站時(shí),很多同學(xué)都會(huì)遇到IE下莫名其妙的空出一行,大家用肉眼看不見,也就是 UTF-8 BOM 簽名了,更多 BOM 知識(shí)請(qǐng)查找“Unicode BOM”。這種情況該怎么辦?我們不妨看看北大青鳥學(xué)員:周曉麗同學(xué)是如何做的。

先介紹一下項(xiàng)目架構(gòu):IIS + .net 2.0 + SSI

暫且不討論為什么要用 SSI,而不用其它技術(shù)(如 UserControl)

生成 index.shtml 肯定要帶 BOM,其實(shí)帶不帶也不會(huì)影響頁面上會(huì)出現(xiàn)空白行。

index.shtml 內(nèi)容如下:
< html>
< body>
< !--#include file=head.shtml-->
< /body>
< /html>

1、head.shtml 保存為 UTF-8 帶    BOM 時(shí),會(huì)出現(xiàn)空白行(頁面元素當(dāng)然不止這些)。

2、head.shtml 保存為 UTF-8 不帶 BOM 時(shí),會(huì)出現(xiàn)亂碼,因?yàn)?SSInc.dll 加載這個(gè)文件時(shí),不知道文件的編碼(因?yàn)闆]有 BOM 簽名),因此會(huì)按 GBK 來加載文件,最后亂碼。所以,正也不行,反也不行,只有最后一招了。(北京北大青鳥學(xué)校

改 index.shtml 為:
< html>
< body>
< !--<!--#include file=head.shtml-->
< /body>
< /html>

在 head.shtml  的頁開頭加上
<!--BOM-->
內(nèi)容。

意圖將 <!--#include 前的 <!-- 和 head.shtml 里的 BOM--> 用HTML注釋掉,在 asp 下應(yīng)該沒有問題。
2年前,用 asp.net include 就發(fā)現(xiàn)一個(gè)問題,就是它的解釋方法和 asp 完全不同,不信可以試試

< !--<!--#include file=head.shtml-->執(zhí)行結(jié)果等效于
< !--#include file=head.shtml-->

又試了半個(gè)小時(shí),發(fā)現(xiàn)
< !--#<!--#include file=head.shtml-->
被忽略,期待更好的解決方案。北京北大青鳥學(xué)校提供。

北大青鳥網(wǎng)上報(bào)名
北大青鳥招生簡(jiǎn)章