Django如何处理TinyMCE编辑器的转义?

2 投票
3 回答
877 浏览
提问于 2025-04-16 08:04

我怎么才能在页面上只显示粗体、斜体和其他没有安全问题的HTML内容呢?

3 个回答

1

如果你想显示所有的HTML内容(不进行转义),可以使用 safe 过滤器。

{{ var|safe }}

在你的情况下,如果你想转义所有内容,但保留某些标签,你可以自己写一个过滤器来实现这个功能:

{{ var|mysafe }}

你可以在这里了解更多信息:http://docs.djangoproject.com/en/dev/howto/custom-template-tags/

这个过滤器的工作流程可以是:

  1. 先转义所有内容
  2. 然后只对允许的标签进行反转义(可以使用 .replace 或正则表达式)
2

可能更合理的做法是配置TinyMCE,让用户只能输入你允许的内容。TinyMCE有一套强大的规则来实现这一点。如果你在使用django-tinymce,可以查看这个链接,了解如何设置TINYMCE_DEFAULT_CONFIG,以便选择你想要的选项。

2

清理HTML代码其实是个挺复杂的事情。那些发垃圾信息的人总是想出新的办法来绕过清理措施。最安全的做法是先列出一个只允许的标签清单,确保只保留这些无害的标签,其他的都要用真正的HTML解析器过滤掉(而不是用正则表达式)。

在djangosnippets.com上,有几个模板标签和过滤器可以用,比如这个或者那个。选择过滤器的时候,要注意它是否使用了白名单,并且使用像lxml.html(最好是lxml.html.clean)或者BeautifulSoup这样的HTML解析器。

撰写回答