阻止 nunjucks 逃跑 HTML

Stop nunjucks from escaping HTML

我有一条评论 AJAX 调用了已发布评论的 returns 数据,我还内置了 @mention 功能,服务器端正在处理 @mentions 并执行 str_replace 提到的用户在响应中用 a 标记替换他们的名字,例如:

{
   data: {
      comment: "<a href=\"profile/derp\">Username</a> hey what's up"
   }
}

但是我似乎无法在文档中找到如何允许 nunjucks 打印它作为实际 HTML,它转义它并显示代码而不是让它成为一个真正的标签。

有谁知道我如何才能将其打印为实际的标签?

好的,在我发布这篇文章后,我几乎立刻就找到了答案!对于其他任何人来说,它就是这样;在打印变量的模板中添加安全过滤器,这将禁用自动转义。

{{ comment.content|safe }}

尽管这意味着它容易受到 XSS injection 的攻击,因此请确保在服务器端添加保护。

您可以考虑传递评论的元数据并让模板创建 HTML:

<p>
  <a href="{{ comment.user.url }}">{{ comment.user.name }}</a> {{ comment.text }}
</p>

然后传递以下元数据:

comment: {
  user: { url: "profile/derp", name: "Username" },
  text: "hey what's up"
}

您还可以使用以下方法避免全局转义:

nunjucks.configure({ autoescape: false });