使tagoup标记清理可选

时间:2010-12-30 03:56:20

标签: orbeon

Tagsoup干扰输入并错误地格式化它。例如,当我们有以下标记时

<a href="www.google.com"></a>Text outside anchor

格式如下

<a href="www.google.com">Text outside anchor</a>

这是一个简单的例子,但我们也有其他问题。因此,我们通过向textarea控件添加额外属性来使tagsoup清理/格式化可选。

这是差异(https://github.com/binnyg/orbeon-forms/commit/044c29e32ce36e5b391abfc782ee44f0354bddd3)。

Textarea现在看起来像这样

<textarea skip-cleanmarkup="true" mediatype="text/html" />

两个问题

  1. 这是正确的方法吗?
  2. 如果我提供补丁,它可以使它成为orbeon代码库吗?
  3. 由于 BinnyG

3 个答案:

答案 0 :(得分:0)

Erik,Alex,等人

我认为这里有两个问题:

第一个问题是标签汤的问题和发生的清理OOTB:空标签被转换为单一标签,当消费/发送到客户端浏览器时,标记被firefox等浏览器“修复”但是因为失去精确度他们做错了。

关闭此清理有助于这种情况,但仅仅这个问题并不是真正正确的答案,因为我们它带走了安全功能和格式良好的标记功能......所以可能需要进行一些调整处理至少某些空标记(除了将它们转换为无效的单例标记。)

这一切让我们想到了第二个问题,那就是我们总是希望这些功能在起作用吗?我们的用例说不。我们希望用户能够吐出他们想要的任何标记,无效或无效。我们没有将表单放在需要保护用户免受跨脚本编码的应用程序中,我们正在构建一个允许用户编辑网页的工具 - 因此我们已经关闭了清理工作。

但关闭清理批发?嗯,重要的是我们可以做到这一点,如果这是我们的用法所要求的,但我们拥有的实现是全有或全无。能够定义清理策略会很好。使该功能可插入。例如: *在系统的XML Config中,将配置名称的“映射”定义为实现给定策略的类名。在XForm Def中,作者将从地图中指定名称。

答案 1 :(得分:0)

如果TagSoup转换:

<a href="www.google.com"></a>Text outside anchor

分为:

<a href="www.google.com">Text outside anchor</a>

这不是TagSoup中的错误吗?如果是这种情况,那么我会说最好解决这个问题,而不是禁用TagSoup。但是,它不是TagSoup中的错误;这是似乎正在发生的事情。假设浏览器将以下内容发送给客户端:

<a shape="rect"></a>After<br clear="none">

这通过TagSoup,结果通过XSLT清理代码,并将以下内容发送到浏览器:

<a shape="rect"/>After<br clear="none"/>

问题出在浏览器上,将其转换为:

<a shape="rect">After</a><br clear="none"/>

问题是我们将此序列化为带有Dom4jUtils.domToString(cleanedDocument)的XML,而将其序列化为HTML则更为谨慎。在这里,我们可以使用Saxon序列化器。它也用于HTMLSerializer。也许您可以尝试更改此代码以使用它而不是使用Dom4jUtils.domToString()。当有机会这样做时,你会告诉我们你发现了什么。

答案 2 :(得分:0)

Binesh和我同意,如果有一个错误,那么在接近根的问题上解决这个问题是个好主意。但我认为具体问题他只是问题的一部分。

我们认为最好有一种名称到策略的映射,以便RTE可以调用适合它们的服务器端处理,如果没有指定,则调用默认值。