页面静态化,为了维护方便会包含一些通用的文件,如页面上有一些是公用嵌套页如hot.xml,bottom.htm等,在使用shtml的include方法时会碰到一个问题:

  包含一个静态页后发现页面上会出现一个空行,网上查资料后发现是因为utf-8的BOM头引起的,测试结果如下

  head.inc编码为utf-8有bom时

  .aspx页面没有任何问题

  .shtml页面在引用的地方会出现一个空行

  head.inc编码为utf-8无bom时

  .aspx页面页面出现乱码

  .shtml页面没有任何问题

  创建无bom的utf8编码文件方法,解决include空白行问题(aspx默认创建的文件都是utf-8+bom的,在include的时候顶部会出现空白行),解决问题后总结如下:

  1、如果你的页面不经常变化,可以用DW把页面另存为utf-8去除dom的方式。如果你的页面是动态页生成的静态页,那这种人工维护的方式就累了。

  2、动态页生成静态页出现空行的解决方法:

  /// 解决include空白行问题

  /// 要抓取的动态页面路径,如:http://www.moppop.com/news.aspx?id=1

  /// 要生成的新文件名,如:news.html

  public void NewsCteateUtf8_NoBom(string strurl, string path) {

  StreamReader sr;

  StreamWriter sw;

  WebRequest HttpWebRequest = WebRequest.Create(strurl);

  WebResponse HttpWebResponse = HttpWebRequest.GetResponse();

  sr = new StreamReader(HttpWebResponse.GetResponseStream(), System.Text.Encoding.Default);

  string strHtml = sr.ReadToEnd();

  strurl = strurl.Substring(strurl.LastIndexOf("/") + 1);

  strurl = strurl.Replace(".aspx", ".html");

  string savefile = xmlprovider.ReadSettingsStr("E://CreatHtml/path.xml", "filepath", "newsavepath") + path + strurl;

  UTF8Encoding utf8 = new UTF8Encoding(false);

  sw = new StreamWriter(savefile, false, utf8);

  sw.WriteLine(strHtml);

  sw.Flush();

  sw.Close();

  }

  以上是我封装好的方法,只需传入读取的动态页面路径和要生成的新文件名,就可以自动处理了。因为生成的文件多,以上物理路径路径我全部放在了xml进行配置,这样维护方便。