阻止网页中的HTML标记

时间:2010-11-18 10:41:23

标签: python html django

所以,我有一个web 2.0网站,我正在构建大量用户输入,但与任何web 2.0网站一样,我会遇到垃圾邮件问题。据我所知,在我的情况下最简单的方法是阻止任何HTML标记。用户不需要格式化,我将用于修复间距。

但是我不认为有任何阻挡标签,xmb听起来很完美,但自从90年代以来就被贬低了,所以非常愚蠢。

否则,我需要什么样的过滤?我看到堆栈溢出允许'基本'HTML ...我该怎么做?阻止某些标签或允许某些标签等。正如我所说,用户不需要任何标签。

编辑:使用django

2 个答案:

答案 0 :(得分:3)

Django 中,您可以转义(编码)特殊HTML字符,例如<>,这样标记可以显示为可读文本,但不起作用HTML:

from django.utils.html import escape
print escape('<div class="q">Q & A</div>')

请注意,您的模板变量可能已被转义,您可能需要先检查它,看看是否需要使用转义

或者您可以按如下方式完全删除标签:

from django.utils.html import strip_tags
strip_tags(string_value)

或者,您可以使用模板过滤器将其删除,如:

{{ value|striptags }}

答案 1 :(得分:2)

如果您不想允许任何HTML,则只需将具有特殊含义的字符转换为各自的实体即可。例如>&gt;&&amp;。如何执行此操作取决于您处理数据的语言,在TT中我会[% some_data | html %],而在PHP中,htmlspecialchars函数将起作用。

如果您想要允许某些内容,则需要运行它并使用HTML解析器,针对白名单检查每个元素和属性,然后将其序列化为HTML。有一些工具可以帮助解决这个问题,但同样,这取决于您所使用的语言。