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

2024-04-20 16:06:59 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

输入:

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

输出:

^{pr2}$

循环标记在表外排序。这很有意义——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>

这种方法的问题是,一旦我正则化了这个格式化黑客,我就不能轻松地重新构建它。编码模板不可编辑。在


Tags: 方法用户name标记loop模板内容data
2条回答

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

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

简单的漂白将标记“{loop}{/loop}”标签可以安全地逃逸。在

**bleatofficial documentation提供了如何定义通配符白名单标记/属性的详细信息。在

这与卫生处理完全无关,这是关于解析(根据规范!)。Foster parenting是HTML解析器直接处理表元素中大多数内容的方式;要改变这一点,您必须在html5parser.py中更改解析器。html5lib的目标是实现一个一致的HTML解析器-它没有API使它不符合要求。在

相关问题 更多 >