3

我正在尝试使用漂白剂来转义 HTML 标签。它工作得很好,除非我试图插入一个被剪断为页面内容的代码。片段插入如下:

<pre>
<code>
 Code sample
</code>
</pre>

代码示例可能包含 html 标签。如果它们在里面,我怎样才能使漂白剂不逃脱标签<pre><code>?我知道我可以将一些标签列入白名单,但似乎没有办法将所有标签列入白名单,如果它们在代码块内,然后在其他情况下列入黑名单。外部 html 标记是从 Markdown 生成的。

此外,bleach 会转义所有 < 和 > 符号,但如果它们出现在代码片段中,则如下所示:

for (auto a = 0; i &lt; 10; ++i)

如果漂白剂不能做到这一点,你能建议另一个逃生者,那可以做我需要的吗?

4

1 回答 1

0

您想将 <pre> 和 <code> 的子标签列入白名单。从我可以从阅读文档中推断出来,您必须一一定义要列入白名单的标签,或者使用每次遇到标签时都会调用可调用对象的可调用对象。

检查文档中名为:Callable Filters的部分

您的问题的一个可能解决方案是在 clean 上传递一个函数 blink.clean 将检查 then clean 方法遇到的标记是否是代码 html 标记的子级。您必须在那里解析 HTML,您可以使用 HTML 解析器以及包的TreeBuilderxml.eTree

这是一个关于不同答案的示例。

于 2016-08-28T16:31:46.463 回答