对*.mht文件结构的一个浅显分析

来源:互联网 发布:mac qq截图快捷键 编辑:程序博客网 时间:2024/06/05 08:48

近日,笔者在进行需求分析的过程中,使用到了利用Excel2003文件直接生成.mht档案文件,然后由web系统对.mht文件 进行索引的一个简单应用,引起了笔者对.mht文件结构进行分析的兴趣,经过尝试和分析,特将心得陈述如下,仅供同行参考:

1.利用MSIE直接打开.mht文件,然后在"查看/源文件"中可以对其内容进行分析;

2.笔者发现.mht文件在运行时状态下,其页面内容中包含若干的汉字,但是.mht的源文件中没有任何的汉字内容,进而分析其内容中有无相应的解码引用,唯一发现的是一个引用文件是"http://www.w3.org/TR/REC-html40",但是很遗憾,该文件并不是解码文件,后来,笔者发现所有的类似"&#34920;"结构有重复出现的迹象,于是笔者尝试着复制不同的"&#34920;"保存后在运行时状态时页面内容果然发生了汉字内容的变化,于是笔者断定.mht采用了非常规编码格式,终于在<head></head>声明代码段中发现了"<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">",经过测试,任何采用此编码的htm页面,均能够对类似"&#34920;"结构进行成功解析;

3.笔者的.mht文件由Excel2003文件直接生成,该文件中包含多个worksheet,也就是多个表单内容,如何在.mht中实现集成?在破译了.mht的解码结构后("<meta http-equiv=3DContent-Type content=3D"text/html; charset=3Dus-ascii">),很清晰的能够发现.mht文件源代码中包含多段"<html></html>"结构,结构间采用类似"------=_NextPart_01C73A56.E1B7DC30"进行分割,显而易见,N个worksheet内通对应了N个"<html></html>"结构.

4.当然,微软将Excel2003文件直接生成.mht档案文件的过程中采用了javascript脚本技术实现了多个页内容之间的切换,其代码就不在此敷述,有兴趣的读者可以自己自己尝试分析,此处笔者需要特别一提的是微软在javascript脚本中的一个用法,如下:

function fnBuildFrameset()
{
           var szHTML=3D"后续的特殊用法,有点类似于Vb6" ;

           with (document)  {
                open("text/html","replace");
                 write(szHTML);
                 close();
          }

}

5.关于.mht的更多精彩,还望和更多同行共同探讨.

 

 

原创粉丝点击