<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fwolf's Blog &#187; mht - Fwolf's Blog</title>
	<atom:link href="http://www.fwolf.com/blog/post/tag/mht/feed" rel="self" type="application/rss+xml" />
	<link>http://www.fwolf.com/blog</link>
	<description>随心·随意·随缘·努力～</description>
	<lastBuildDate>Wed, 07 Jul 2010 07:07:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>保存网页为单个文件/Save webpages All-in-one file</title>
		<link>http://www.fwolf.com/blog/post/298</link>
		<comments>http://www.fwolf.com/blog/post/298#comments</comments>
		<pubDate>Tue, 26 Jun 2007 13:56:43 +0000</pubDate>
		<dc:creator>Fwolf</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[data:URI]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[mht]]></category>

		<guid isPermaLink="false">http://www.fwolf.com/blog/post/298</guid>
		<description><![CDATA[看到好的网页需要保存到本地的时候，有几种保存方式可选择，保存为网页文件（仅网页）的话，会得到一个html，但是不包含所有的图片等附加文件，保存为网页文件（全部）的话，会得到一个html文件和一个目录，图片等所有附加文件都在目录中，但是要想保存为一个文件并且所有的图片等附加文件还都完整的话，目前只有ie可以实现，那就是保存为mht文件，那么这个mht文件到底是什么呢？ mht其实是一种MHTML文件，MHTML是MIME HTML (Multipurpose Internet Mail Extension HTML)的简称，它的初衷是在邮件中嵌入HTML内容，RFC2557详细描述了文档定义。ie保存的mht文件、html格式的电子邮件、甚至chm文件都采用了MHTML或者相似的技术。 遗憾的是，不同的浏览器对mhtml的支持程度不尽相同，并且不同的浏览器保存的mhtml文件也不一定兼容（本部分内容主要参考自wikipedia）： IE: 自从1999年的ie5就支持保存为mht格式了，但在保存一些复杂页面的时候会出错。 Opera: 自从opera 9.0(build 8264, 发布于2006-3-10)起支持保存mhtml文件。 Firefox: mozilla、firefox系列浏览器到目前为止仍然不直接支持保存mhtml文件功能，虽然个人非常喜欢firefox，但是这的确是个缺点，甚至早在1999年就有人在Bugzilla上提出了这个问题，但没有得到开发人员的足够重视。不过倒是有个插件Mozilla Archive Format（地址二）填补了这一空白，但是目前只支持到ff1.5，针对ff2只有一个非官方的build。据说MAF生成的mht文件和微软系列不全兼容。 Safari: 自动2005年4月29日的2.0版本，苹果上的safari支持保存网页为mhtml文件，但是却不支持显示mhtml文件。 由于浏览器对mhtml的支持相当的不统一，mhtml的使用受到了很大的限制，就我个人的感觉，还是以微软系列的mht为主流，甚至kde上还有一款kmhtConvert软件，可以把微软的mht格式转换为kde的mhtml格式——war文件。 由于mhtml的原理，所有支持mhtml的浏览器或插件采用的方式大多是变相的文件打包的方式，也就是相当于把网页完整保存下来，然后把html文件和目录下的图片等其他文件通过某种方法进行大包，并更改html文件中的链接，通过特殊的链接格式引用包中的资源文件。其实，除了mhtml以外，我们还有另外一个选择，那就是data: URI scheme。 data: URI scheme和mhtml的不同之处在于，mhtml解决问题的方式是对多个文件打包，而data: URI则是直接把文件的内容包含在地址当中。比如我引用了一个图片文件http://www.fwolf.com/favorite.ico，mhtml的做法是把这个ico文件打包进去，而data: URI则是直接把地址http://www.fwolf.com/favorite.ico替换为诸如data: image/png; base64, iVBORw0KG&#8230;..这样的代码，从而实现所有的内容都在一个文件中的目的。 data: URI被大多数浏览器支持，并且语法由RFC2397定义，不同浏览器的处理效果基本一致，当然，和往常一样，不被ie系列支持。不过从我个人来讲，不管是windows平台还是linux平台，我都会选择firefox浏览器，所以可以无视掉ie。 当然data: URI也不是万能药水，它也有自己的优缺点：（本部分参考自wikipedia） 优点： 增加了web访问的请求次数，比如一个包含2个图片引用的网页文件，一共会产生3次web请求——一次是文件本身，另外两次分别是那两个图片。这样会节省一些网络资源，因为http协议是无状态协议，每次请求都一定的系统开销。 一般的浏览器默认配置都是最多同时使用2个连接访问服务器，所以请求次数的减少也节省了连接资源。有些web服务器从服务端也可以作类似的配置。 浏览器缓存中的文件数目减少了。 在一些访问受限制的场合可以使用，比如一个web界面的超文本编辑器，就可以通过这种方式在编辑区中插入图片。（不明白它在说什么） 我想这同样适用于需要隐藏图片地址的场合，因为图片的地址就是它的数据，而不是到你服务器上某个文件的链接，所以这一点对付图片盗链者来说简直太有效了。 可以避免页面采用https连接，图片等文件采用普通http连接所产生的“本页即包括安全内容，又包含不安全的内容”这样的情况。 最重要的一点，通过它可以实现把网页保存为一个单独的文件 。 缺点： 嵌入的内容在客户端要重新进行编码和显示，增加了一点点客户端系统开销。 如果同一项资源被多次引用，也只能重复嵌入它的数据，没有“重复利用”这一说，如果网页中同一个图片被显示了100次的话，数据量的增加是惊人的。 浏览器对URI长度通常都有限制，比如opera限制为4k，不过这只影响你把date: URI写到地址栏或者&#60;a&#62;标记中的情况。 不支持数据压缩，采用base64编码的数据体积会增加1/3，采用url-encode编码的数据体积会增加2倍。不过如果web服务器启用了压缩，这一点的影响就可以抵消了。 不被微软的IE支持。 data: [...]]]></description>
			<content:encoded><![CDATA[<p>看到好的网页需要保存到本地的时候，有几种保存方式可选择，保存为网页文件（仅网页）的话，会得到一个html，但是不包含所有的图片等附加文件，保存为网页文件（全部）的话，会得到一个html文件和一个目录，图片等所有附加文件都在目录中，但是要想保存为一个文件并且所有的图片等附加文件还都完整的话，目前只有ie可以实现，那就是保存为mht文件，那么这个mht文件到底是什么呢？</p>

<p>mht其实是一种MHTML文件，MHTML是<a href="http://en.wikipedia.org/wiki/MHTML">MIME HTML (Multipurpose Internet Mail Extension HTML)</a>的简称，它的初衷是在邮件中嵌入HTML内容，<a href="http://www.ietf.org/rfc/rfc2557.txt">RFC2557</a>详细描述了文档定义。ie保存的mht文件、html格式的电子邮件、甚至chm文件都采用了MHTML或者相似的技术。</p>

<p>遗憾的是，不同的浏览器对mhtml的支持程度不尽相同，并且不同的浏览器保存的mhtml文件也不一定兼容（本部分内容主要参考自<a href="http://en.wikipedia.org/wiki/MHTML">wikipedia</a>）：</p>

<p><strong>IE: </strong>自从1999年的ie5就支持保存为mht格式了，但在保存一些复杂页面的时候会出错。
<strong>Opera: </strong>自从opera 9.0(build 8264, 发布于2006-3-10)起支持保存mhtml文件。
<strong>Firefox: </strong>mozilla、firefox系列浏览器到目前为止仍然不直接支持保存mhtml文件功能，虽然个人非常喜欢firefox，但是这的确是个缺点，甚至<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=18764">早在1999年就有人在Bugzilla上提出了这个问题</a>，但没有得到开发人员的足够重视。不过倒是有个插件<a href="http://maf.mozdev.org/">Mozilla Archive Format</a>（<a href="https://addons.mozilla.org/firefox/212/">地址二</a>）填补了这一空白，但是目前只支持到ff1.5，针对ff2只有一个<a href="http://www.mediafire.com/?fgn3zx4ktzd">非官方的build</a>。据说MAF生成的mht文件和微软系列不全兼容。
<strong>Safari: </strong>自动2005年4月29日的2.0版本，苹果上的safari支持保存网页为mhtml文件，但是却不支持显示mhtml文件。</p>

<p>由于浏览器对mhtml的支持相当的不统一，mhtml的使用受到了很大的限制，就我个人的感觉，还是以微软系列的mht为主流，甚至kde上还有一款<a href="http://www.kde-apps.org/content/show.php?content=14315">kmhtConvert</a>软件，可以把微软的mht格式转换为kde的mhtml格式——war文件。</p>

<p>由于mhtml的原理，所有支持mhtml的浏览器或插件采用的方式大多是变相的文件打包的方式，也就是相当于把网页完整保存下来，然后把html文件和目录下的图片等其他文件通过某种方法进行大包，并更改html文件中的链接，通过特殊的链接格式引用包中的资源文件。其实，除了mhtml以外，我们还有另外一个选择，那就是<a href="http://en.wikipedia.org/wiki/Data:_URI_scheme">data: URI scheme</a>。</p>

<hr />

<p><a href="http://en.wikipedia.org/wiki/Data:_URI_scheme">data: URI scheme</a>和mhtml的不同之处在于，mhtml解决问题的方式是对多个文件打包，而data: URI则是直接把文件的内容包含在地址当中。比如我引用了一个图片文件http://www.fwolf.com/favorite.ico，mhtml的做法是把这个ico文件打包进去，而data: URI则是直接把地址http://www.fwolf.com/favorite.ico替换为诸如data: image/png; base64, iVBORw0KG&#8230;..这样的代码，从而实现所有的内容都在一个文件中的目的。</p>

<p>data: URI被大多数浏览器支持，并且语法由<a href="http://tools.ietf.org/html/rfc2397">RFC2397</a>定义，不同浏览器的处理效果基本一致，当然，和往常一样，不被ie系列支持。不过从我个人来讲，不管是windows平台还是linux平台，我都会选择firefox浏览器，所以可以无视掉ie。</p>

<p>当然data: URI也不是万能药水，它也有自己的优缺点：（本部分参考自<a href="http://en.wikipedia.org/wiki/Data:_URI_scheme">wikipedia</a>）
<strong>优点：</strong></p>

<ul>
    <li>增加了web访问的请求次数，比如一个包含2个图片引用的网页文件，一共会产生3次web请求——一次是文件本身，另外两次分别是那两个图片。这样会节省一些网络资源，因为http协议是无状态协议，每次请求都一定的系统开销。</li>
    <li>一般的浏览器默认配置都是最多同时使用2个连接访问服务器，所以请求次数的减少也节省了连接资源。有些web服务器从服务端也可以作类似的配置。</li>
    <li>浏览器缓存中的文件数目减少了。</li>
    <li>在一些访问受限制的场合可以使用，比如一个web界面的超文本编辑器，就可以通过这种方式在编辑区中插入图片。（不明白它在说什么）</li>
    <li>我想这同样适用于需要隐藏图片地址的场合，因为图片的地址就是它的数据，而不是到你服务器上某个文件的链接，所以这一点对付图片盗链者来说简直太有效了。</li>
    <li>可以避免页面采用https连接，图片等文件采用普通http连接所产生的“本页即包括安全内容，又包含不安全的内容”这样的情况。</li>
    <li>最重要的一点，通过它可以实现把网页保存为一个单独的文件 <img src='http://www.fwolf.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> 。</li>
</ul>

<p><strong>缺点：</strong></p>

<ul>
    <li>嵌入的内容在客户端要重新进行编码和显示，增加了一点点客户端系统开销。</li>
    <li>如果同一项资源被多次引用，也只能重复嵌入它的数据，没有“重复利用”这一说，如果网页中同一个图片被显示了100次的话，数据量的增加是惊人的。</li>
    <li>浏览器对URI长度通常都有限制，比如opera限制为4k，不过这只影响你把date: URI写到地址栏或者&lt;a&gt;标记中的情况。</li>
    <li>不支持数据压缩，采用base64编码的数据体积会增加1/3，采用url-encode编码的数据体积会增加2倍。不过如果<a href="299">web服务器启用了压缩</a>，这一点的影响就可以抵消了。</li>
    <li>不被微软的IE支持。</li>
</ul>

<p>data: URI的基本使用格式如下：</p>

<div class="code">
data:[&lt;MIME-type&gt;][;base64|charset=some_charset],&lt;data&gt;
</div>

<p>mime-type是嵌入数据的mime类型，比如png图片就是image/png。
如果后面跟base64，说明后面的data是采用base64方式进行编码的，毕竟数据都需要编码以免和其他的网页内容相冲突。所以如果不采用base64编码，就必须使用urlencode把数据进行转换，在这种情况下可以使用charset=来指定内容的字符集。</p>

<p>下面贴几个data: URI实际应用的例子，先看效果，再贴源码，注意我贴的源码中英文引号会被WP替换为中文引号，另外为了显示方便会增加一些回车换行，如果要复制到本地实验的话最好直接查看本页面的源代码。</p>

<p>首先是一个图片的例子，我的图片也许大了些，不过用来作qq自定义表情发给朋友还是不错滴。
<img src="data:image/gif;base64,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" alt="这个图片用来作qq表情传给别人不错哦" />
注意这可是很“长”的一行哦，源代码：</p>

<div class="code">
&lt;img src=&#8221;data:image/gif;base64,
R0lGODlhIwGVAPecAHmCwQAA/yBKv+P1//z+/7zo/6De/9Hv/1FOhMbj+I2x7SBd1IGAlur4//7/
/0hGh9Tw/+by/HiX3Vh4y3iW28nt/5/e/zVjzUJruzVmzyA9ryA5qzhSteb2//X8//f8/93z/6jh
&#8230;&#8230;（省略若干行）
RT3asYpVxKLsEujHwTGxjqh8pTRp1zruHGEQX5CCEZhwgzj2cpSDzCErxThAQq5tfMEk5Sq/B8xX
LlF/8FSm/6b5xynaUD3zTFwpa/cixHbu05BWfCcwT+lCfZJPn148nyfniEzRCbSVoKwWMRUWEAA7
&#8221; alt=&#8221;这个图片用来作qq表情传给别人不错哦&#8221; /&gt;
</div>

<p>下面是一个在inline css中嵌入背景图的例子：
<span style="padding-right: 20px; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lEQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC)     top right no-repeat;">
data: URI</span>
源代码：</p>

<div class="code">
&lt;span style=&#8221;padding-right: 20px; background: url(data:image/png;base64,
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0lE
QVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6P9/AFGGFyjOXZtQ
AAAAAElFTkSuQmCC) top right no-repeat;&#8221;&gt;
data: URI&lt;/span&gt;
</div>

<p>再来一个嵌入javascript代码的例子，注意不同于上面两个例子，这次使用的是urlencode编码方式：
<script type="text/javascript" src="data:text/javascript;charset=utf-8,function%20test_urlencode_js%28%29%7Balert%28%27%E8%BF%99%E7%AE%97%E6%98%AF%E4%B8%80%E7%A7%8D%E5%8A%A0%E5%AF%86%E4%B9%88%EF%BC%9F%27%29%3B%7D"></script>
<span onclick="javascript:test_urlencode_js();">点一下这里&#8211;&gt;Fwolf作品</span>
源代码：</p>

<div class="code">
&lt;script type=&#8221;text/javascript&#8221; src=&#8221;data:text/javascript;charset=utf-8,function%20test_urlencode_js%28%29%7Balert%28%27%E8%BF%99%E7%AE%97%E6%98%AF%E4%B8%80%E7%A7%8D%E5%8A%A0%E5%AF%86%E4%B9%88%EF%BC%9F%27%29%3B%7D&#8221;&gt;&lt;/script&gt;
&lt;span onclick=&#8221;javascript:test_urlencode_js();&#8221;&gt;点一下这里&#8211;&amp;gt;Fwolf作品&lt;/span&gt;
</div>

<p>参考：
<a href="http://en.wikipedia.org/wiki/MHTML">MHTML on wikipedia</a>
<a href="http://maf.mozdev.org/">Maf extension project for mozilla &amp; firefox</a>
<a href="https://addons.mozilla.org/firefox/212/">Mozilla Archive Format on Firefox Addons</a>
<a href="http://www.ietf.org/rfc/rfc2557.txt">RFC2557: MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)</a>
<a href="https://bugzilla.mozilla.org/show_bug.cgi?id=18764">Bugzilla: Full rfc2557 MHTML multipart/related support in BROWSER(from 1999)</a>
<a href="http://people.dsv.su.se/~jpalme/ietf/mhtml.html">Using HTML in E-mail</a>
<a href="http://www.kde-apps.org/content/show.php?content=14315">kmhtConvert  </a>
<a href="http://en.wikipedia.org/wiki/Data:_URI_scheme">data: URI scheme</a>
<a href="http://tools.ietf.org/html/rfc2397">RFC2397: The &#8220;data&#8221; URL scheme</a>
<a href="http://www.sveinbjorn.org/dataurls_css">Using Data URLs Effectively with Cascading Style Sheets</a>
<a href="http://gonze.com/xipf/datauri/">HTML as media container format</a></p>

<h4>后记 @ 2008-01-12</h4>

<p>opera也支持mht格式了，包括它的linux版本，不知道从什么时候开始的。</p>

<p>其实这篇文章在2007年6月就写好了，当时就想着写一个小工具，利用data:URI这个特性，能够把网页都保存到一个文件当中去，然后再发表文章，可这一等就是半年多，终于利用2008年春节的空档时间，把这个工具已经写好了，有兴趣的可以<a href="/tools/2008/save_html_all_in_one_file.php">试一试</a>，还不知道我的服务器能否支撑得住呢 <img src='http://www.fwolf.com/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> 。</p>

	Tags: <a href="http://www.fwolf.com/blog/post/tag/datauri" title="data:URI" rel="tag">data:URI</a>, <a href="http://www.fwolf.com/blog/post/tag/html" title="html" rel="tag">html</a>, <a href="http://www.fwolf.com/blog/post/tag/mht" title="mht" rel="tag">mht</a>, <a href="http://www.fwolf.com/blog/post/tag/tools" title="Tools" rel="tag">Tools</a><br />

	<h4>Related posts</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.fwolf.com/blog/post/17" title="我的email客户端软件选择历程 (2005-05-23)">我的email客户端软件选择历程</a> (7)</li>
	<li><a href="http://www.fwolf.com/blog/post/439" title="小巧的编辑器Geany (2009-04-20)">小巧的编辑器Geany</a> (5)</li>
	<li><a href="http://www.fwolf.com/blog/post/433" title="好玩有趣又有用的Mockups (2009-03-02)">好玩有趣又有用的Mockups</a> (4)</li>
	<li><a href="http://www.fwolf.com/blog/post/338" title="发现fcitx也很不错嘛 (2007-07-08)">发现fcitx也很不错嘛</a> (6)</li>
	<li><a href="http://www.fwolf.com/blog/post/419" title="为ThinkingRock报表添加字体 (2008-08-01)">为ThinkingRock报表添加字体</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.fwolf.com/blog/post/298/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
