1

我正在使用bleach,它用于html5lib清理用户生成的内容,这些内容是设计为dust.js模板的 HTML 片段

一切都很好,除了这种情况-

输入:

<table>
    {#loop}
      <tr>
         <td>{name}</td>
      </tr>
    {/loop}
</table>

输出:

    {#loop}
    {/loop}
<table>
      <tr>
         <td>{name}</td>
      </tr>
</table>

循环标签在表格之外排序。这很有意义 - html5lib 正在纠正我的 html;内容不应包含在表结构中,除非它包含在 td/th 标记中。我通常希望发生这样的更正,并且仍然希望发生更正——但我想知道是否有办法以某种方式让这些标签通过。

过去有没有人遇到过类似的情况,并且能够抑制这种清理行为?

到目前为止,我想出的唯一方法是将控件包装在可以正则表达式输出的标记中:

<table>
    <tr data-layout=""><td>{#loop}</td></tr>
      <tr>
         <td>{name}</td>
      </tr>
    <tr data-layout=""><td>{/loop}</td></tr>
</table>

这种方法的问题在于,一旦我正则表达式出这种格式化黑客,我就不能轻易地将它重新构建。编码的模板变得不可编辑。

4

2 回答 2

1

这根本与清理无关,这是关于解析(根据规范!)。Foster-parenting 是 HTML 解析器直接在表格元素中处理大多数内容的方式;要改变这一点,你必须在html5parser.py. html5lib 旨在实现符合标准的 HTML 解析器——它没有 API 使其不符合标准。

于 2014-05-13T18:46:54.800 回答
-1

Bleach 内置了白名单标签/属性。但是,您可以扩展或覆盖现有的白名单标签/属性。以下是如何将自定义标签添加到现有“白名单”的示例;

bleach.ALLOWED_TAGS.extend( ['{#*}' , '{/*}' ] )

简单的漂白将标记“{#loop} {/loop}”标签是安全的逃脱。

** Bleach官方文档提供了如何定义通配符白名单标签/属性的详细信息。

于 2014-05-08T00:06:16.163 回答