4

上下文:我的HTML5 文档不需要 Javascript、动画、表单……它们是“唯一的内容”。因此,可以对这些表示进行过滤,只需要“完整 HTML5 表示”的一些子集/约束。表达这种情况(以及其他更广泛的情况!)的一个好方法是说“我的文档可以用多语言标记约束来表达”。

问题:是否有一种工具可以将“任何 HTML5”转换(或过滤丢失虚假信息)为Polyglot XHTML5
最好是基于 DOM(或 XSLT 或 XQuery)扩展的工具。

4

2 回答 2

2

我不会有一个完整的解决方案。在我看来,这种转换有两个甚至三个阶段:

第 1 阶段:使 HTML5 格式良好

在第一阶段需要解决 HTML 5 缺乏结构良好的要求的情况。

在您拥有 DOM 之前,在您有机会获得期望远程看起来像 xml 的东西起作用的工具之前,您需要它。

那么谁实现了这种转换:(几乎?)每个浏览器。不少有源代码。您也可以从正在运行的浏览器中获取此信息:检查源代码并查看它使用标签汤作为输入的作用,然后您将获得结构良好的源代码。

找到此类源代码的另一个地方是允许您在网页中编辑 xhtml 的编辑器(FCKeditor 等)

例如<p>para<ul><li>bullet</ul><p>para 变成<p>para</p><ul><li>bullet</li></ul><p>para</p>

第 2 阶段:过滤掉 Polyglot 中不允许的内容

一旦 html 标记结构良好,下一步您必须删除多语言标记中不允许的内容,因为 html 解析器和 XML 解析器之间的解释方式存在差异。

那些您可能有机会使用 XSLT 并构建过滤器的人,但您无法验证这一切,因为没有 DTD 或任何等效的东西来验证 polyglot (x)html。甚至那些存在的为数不多的 xhtml5 验证器也被(已经)废弃了,所以它会让你的任务变得困难。

无论如何,尝试找到其中一个存在的验证器的源代码是查找接近此的源代码的最佳选择。

第三阶段:修复外部实体

说什么 ?好吧,您可以拥有漂亮的 polyglot (x)html 并包含一个执行单个 document.write 的 javascript,但这一切仍然失败。因此,在它起作用之前,您也需要追捕所有这些。

于 2015-07-10T14:46:38.157 回答
0

我不知道这样的工具,但是基于正则表达式,我认为应该可以使用您喜欢的编程语言编写自己的转换器。我给你一个使用 Java 正则表达式的例子,但它也应该可以转移到 PHP 上。您可以在regexplanet.com上对其进行测试

给定:任何自关闭的 html 标记,例如<textarea class="placeholder"/>

目标:标签应转换为<textarea class="placeholder"></textarea>

这可以使用 Java正则匹配表达式<\s*([^\s>]+)([^>]*)/\s*>来实现,例如替换字符串,例如<$1$2></$1>. 表达式找到标签中的第一个单词textarea,将其分配给模式组 no。1 和标签上的所有属性到模式组编号。2. 这使您能够连接组号。开始标签中的 1 和 2 和重用组编号。1 再次出现在结束标签中。

希望这可以帮助。

于 2015-03-14T09:41:49.380 回答