35

我正在做一个项目,它将单个图像和文本文件存储在一个地方,就像一个时间胶囊。现在,几乎每个项目都可以保存为一个文件,如 DOC、PPT 和 ODF。但是完整的网页不能——它们被保存为单独的 HTML 文件和数据文件夹。我想将网页保存在一个存档中,虽然有多种解决方案,但没有“标准”。HTML 档案的最佳格式是什么?

  • 微软有MHTML——基本上是一个完全编码为 MIME HTML 电子邮件的文件。它已经基于现有的标准,并且作为自己的 MHTML 被提议为rfc2557。这是一个好主意,它一直存在,除了它自 1999 年以来一直是“提议的标准”。另外,除了 IE 之外的实现也很麻烦。IE和Opera支持;带有繁琐扩展的 Firefox 和 Safari。

  • Mozilla 有Mozilla 存档格式——基本上是一个带有标记和图像的 ZIP 文件,元数据保存为 RDF。这是一个很棒的想法——Winamp 为皮肤做这个,ODF 和 OOXML 为他们的嵌入图像做这个。我喜欢这个,除了 1. 除了 Mozilla 没有其他人使用它, 2. 自 Firefox 1.5 以来唯一支持它的扩展没有更新。

  • 数据 URI正变得越来越流行。您无需像 MHTML 或 MAF 那样引用外部位置,而是将文件直接编码为 base64 的 HTML 标记。根据您的观点,它被简化了,因为文件在标记所在的位置。然而,支撑仍然有些弱。Firefox、Opera 和 Safari 毫无瑕疵地支持它;市场领导者IE仅在 IE8 时才开始支持它,即使在那时也有限制。

  • 当然,还有“保存完整网页”,其中 HTML 标记保存为"savedpage.html",文件保存在单独的"savedpage_files"文件夹中。Afaik,每个人都这样做。它得到了很好的支持。但是必须处理两个独立的元素一点也不简单和精简。我的项目需要将它们放在一个存档中。

考虑到浏览器支持易于编辑页面您认为将网页保存在单个存档中的最佳方式是什么?什么是最好的“标准”?还是我应该只管处理 HTML 文件和单独的文件夹?为了我的项目,我可以支持它,但我最好避免它。

4

7 回答 7

16

我最喜欢的是 ZIP 格式。因为:

  • 它非常适合这个目的
  • 有据可查
  • 有很多实现可用于创建或读取它们
  • 用户可以轻松提取单个文件、更改它们并将它们放回存档中
  • 几乎每个主要操作系统(Windows、Mac 和大多数 linux)都内置了 ZIP 程序

替代品都有一些缺陷:

  • 使用 MHTMl,您无法轻松编辑。
  • 使用数据 URI,我不知道实现会有多困难。(使用 ZIP,甚至我可以在 3 年前用 PHP 做到这一点......)
  • 将内容存储为单独文件的选项有太多可能出错并弄乱您的存档的内容。
于 2008-11-03T21:54:44.843 回答
4

几乎所有平台上的几乎所有浏览器都支持 PDF,并将内容和图像存储在一个文件中。它们可以使用正确的工具进行编辑。这几乎绝对不是理想的,但它是一个可以考虑的选项。

于 2008-11-03T21:51:11.403 回答
4

这不仅仅是文件格式的问题。另一个关键问题是您到底想存储什么?是吗:

  1. 将整个页面与所有引用的资源(图像、CSS 和 javascript)保持原样存储?

  2. 在某个时间点呈现页面时捕获页面;网页 DOM 的某些渲染状态的静态图像?

浏览器中大多数当前的“将页面另存为”功能,无论是 MAF 或 MHTML 还是文件+目录,都尝试第一种方式。这最终是有缺陷的方法。

不要忘记网页有时更像是本地应用程序,而不是您可以轻松存储的静态文档。潜在问题:

  1. 一页实际上是由JS动态构建的几个页面,需要用户交互才能使其达到所需状态

  2. AJAX 应用程序可以与远程服务进行远程通信,使其无法用于离线查看。

  3. javascript 代码中的隐藏链接。这样的资源就不是存储页面的一部分。即使解析 JS 代码也可能不会发现它们。您需要运行代码。

  4. 甚至可以重新计算基本 html 元素的位置,也可以由 JS 动态计算,并且在本地重新创建它并不总是可能/容易。

  5. 您需要某种 JS 内存转储并加载它以使页面达到您希望存储的所需状态

还有更多的问题......

检查 Chrome SingleFile扩展。它将网页存储到一个 html 文件中,其中包含使用已经提到的数据 URI 内联的图像。我没有对它进行太多测试,所以我不能说它处理“易失性”ajax 页面的效果如何。

于 2013-04-21T18:26:43.813 回答
3

使用 zip 文件。

您始终可以制作一个程序/脚本,将 zip 文件提取到临时目录并在浏览器中加载 index.html 文件。您甚至可以使用 index.ini/txt 文件来指定提取时应加载的文件。

基本上,您需要类似 Mozilla Archive 格式的东西,但没有不必要的 rdf 废话,只是为了指定要加载的文件。

MHT 文件很好,但它们通常使用 base64 来嵌入文件,这会使文件大小超出应有的大小(数据 URI 也是如此)。您可以将附件添加为二进制文件,但您必须使用十六进制编辑器手动执行此操作,或者创建一个工具,并且客户端对它的支持可能不太好。

当然,如果您想使用浏览器生成的内容,MHT(至少是 Opera 和 IE)可能会更好。

于 2008-11-03T22:09:19.540 回答
1

我认为没有任何借口可以使用 zipfile 以外的任何东西

于 2008-11-03T21:51:13.540 回答
0

好吧,如果浏览器支持和易于编辑是最大的担忧,我认为你会坚持使用文件+目录的方法,除非你愿意为单一文件格式提供编辑器并且在浏览器中没有很好的支持。

您可以通过压缩内容来创建单个文件。您还可以创建父目录以简化处理。

于 2008-11-03T21:54:58.307 回答
-1

问题是html是自下而上而不是自上而下。查看您保存在我的盒子上的文件名“在单个存档中保存完整网页(图像等)的最佳“文件格式”是什么? - Stack Overflow.html”

只需添加一个'|' 并且一个人在将备份复制和粘贴到备用驱动器时遇到了麻烦。最后你结束了。砍文件名以保存它。数十个/也许数百个相同的 index.html 或 index.php 使我的驱动器杂乱无章。

部分解决方案是编写您自己的 CMS 并使用脚本将所有相关文件映射到平面文件数据库 - 然后使用 fileName、size、mtime 和 md5 为每个文件获取唯一的 Id。创建一个允许 100k 或 1000k 记录的平面文件索引。目标是一次编写,多次使用。因此,您需要一个真正的 CMS,您需要一个基于 files_archive 中内容的唯一 ID(例如 index8765432.html)。其他人也一样。然后,您可以从保存的原始 html 到 files_archive 的非破坏性符号链接,并在需要时使用 php 或替代脚本重新创建文件。不知道它是否会像我一样在您所处的位置起作用-也许一周后肯定会知道。更有用的方法是根据您的业务或个人需求和相关任务建立自上而下的结构。因此,您的文件可能自上而下组织,而外部文件自下而上以保留原始内容。我的兴趣在于 Web 3.0 服务,越接近机器对机器交互,就越需要结构化信息。也许是时候重新考虑将所有内容捆绑到一个文件中的想法了。所以你有数百个 main.css 为什么捆绑时自上而下的解决方案可能会让你修改一个文件而不是数百个文件。

于 2015-10-21T00:39:44.480 回答