是否可以通过以下方式配置 HTML Tidy:
给定html:
lorem ipsum</em> dolar sit amet.</p>
让它生成
<p><em>lorem ipsum</em> dolar sit amet.</p>
而不是仅仅去掉结束标签?
非常感谢
马特
不,HTML Tidy 不提供该选项。
您会期望简单整洁的解析器能够推断出先前的意图。
确定一个标签何时必须关闭,是否打算在该点关闭,可以由解析器使用 html 的规则来完成。
我基本上同意 Sky Sanders 的回答。除了:
您会期望简单整洁的解析器能够推断出先前的意图。
您可以编写一个解析器来提供所描述的功能,而无需推断任何意图,只是确定性地工作。一个人可以很容易(是的,或多或少容易:))编写一个完成这项工作的算法。这个想法是:
毕竟,这已经可以用 HTML Tidy 完成了,而且每个浏览器/解析器都已经隐式地做到了(我在这里不是在谈论有效的 XHTML):
<div>some <span><em>text</span> here</div>
得到
<div>some <span><em>text</em></span> here</div>
我们现在可以做一些算法来分析以下内容,从字符串的末尾开始并反向搜索:
<div>some <span>text</em></span> here</div>
产生以下一个,因为它看到em
标签嵌入在span
标签中。
<div>some <span><em>text</em></span> here</div>
现在我们必须编写一个算法来添加缺失的结束标签和开始标签。现在让我们来看看这个 html 片段:
<div>some <span>text</em> here</div>
首先应用“添加所有缺少的结束标签”方法:
<div>some <span>text</em> here</span></div>
该算法在这里假设后面的每个结束和开始标签都<span>
嵌入在span
. 只有当它看到某个在<span>
. 在这种情况下,这是</div>
,之前有一个有效的开始标签<div>
。然后在反向搜索中应用相同的语义,如前所述:
<div>some <span><em>text</em> here</span></div>
等等。
在我看来:不。这在技术上是可行的,但不值得付出努力。您必须实现自己的解析器以及上述伪智能方法。此外,这将对html应用一种无论如何都不存在的语义:每个浏览器/解析器都只是忽略孤立的结束标签,那么为什么要关注它们呢?
如果我还不能说服你,请考虑 html 的语义:
some <b>text</b> here
读起来像:“打印'一些'。开始渲染粗体。打印'文本'。停止渲染粗体。打印'这里'。”
尽管:
some text</b> here
读起来像:“打印'一些文本'。停止渲染粗体。” “什么?我什至没有开始渲染任何大胆的东西!?我会忽略那个......” :)