是否可以通过以下方式配置HTML Tidy:
鉴于html:
lorem ipsum</em> dolar sit amet.</p>
让它生成
<p><em>lorem ipsum</em> dolar sit amet.</p>
而不仅仅是剥离结束标签?
非常感谢
马特
答案 0 :(得分:2)
没有。 HTML Tidy不提供该选项。
你会期望简单整洁的解析器推断出先前的意图。
确定何时必须关闭标记,是否打算在该点关闭,解析器可以使用html规则来完成。
答案 1 :(得分:2)
我基本同意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>
et voila。
在我看来:不。技术上可行,但不值得努力。您必须实现自己的解析器,以及上面描述的伪智能方法。另外,这会对不存在的html应用语义:每个浏览器/解析器都会忽略孤立的结束标记,那么为什么要关注它们呢?
如果我还不能说服你,请考虑html的语义:
some <b>text</b> here
读起来像:“打印'一些'。开始渲染粗体。打印'文字'。停止渲染粗体。打印'这里'。”
虽然:
some text</b> here
读起来像:“打印'一些文字'。停止渲染粗体。” “什么?我甚至没有开始渲染任何大胆的东西!?我只会忽略它......”:)