绕过html5lib / bleach中特定的HTML清理



我使用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>

这种方法的问题是,一旦我正则化了这个格式化技巧,我就不能轻易地重新构建它了。编码后的模板变得不可编辑。

这与清理无关,这是关于解析(每个规范!)扶植式是HTML解析器直接处理表元素中的大多数内容的方式;要改变这一点,您必须更改html5parser.py中的解析器。html5lib旨在实现一个符合标准的HTML解析器——它没有api使其不符合标准。

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

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

简单的漂白将标记"{#loop} {/loop}"标记是安全的转义。

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

相关内容

  • 没有找到相关文章

最新更新