【问题标题】:Blocking HTML tags in a webpage阻止网页中的 HTML 标记
【发布时间】:2011-05-11 23:06:56
【问题描述】:

所以,我正在构建一个包含大量用户输入的 web 2.0 站点,但与任何 web 2.0 站点一样,我会遇到垃圾邮件的问题。据我所知,就我而言,最简单的方法是阻止任何 HTML 标签。用户不需要格式化,我将用于固定间距。

但我不认为有任何阻止标签,xmb 听起来很完美,但自 90 年代以来就被弃用了,太愚蠢了。

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

编辑:使用 django

【问题讨论】:

  • 您没有指定您使用的服务器端语言。看到这将需要服务器端处理,这是必不可少的
  • 信息:问题是针对 Django 的
  • this other post,我也使用:github.com/dcollien/FilterHTML 来做这种事情

标签: python html django


【解决方案1】:

如果您不想允许任何 HTML,那么只需将具有特殊含义的字符转换为它们各自的实体。例如>>&&。你如何做到这一点取决于你处理数据的语言,在 TT 中我会 [% some_data | html %] 而在 PHP 中 htmlspecialchars 函数会发挥作用。

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

【讨论】:

  • 我正在使用 django,所以这可能会很困难,但我对它有点不熟悉,所以......也许有可能,但我没有意识到。关于如何在 django 中执行此操作的任何想法?
  • 这比带标签的答案要好。
  • @Spudley 另一个答案已经包含此方法,不仅是 strip_tags()。
  • @SuperDuck - 我发表评论时没有。但我的观点是,strip-tags 删除了一些用户的输入。网站所有者不希望允许使用原始 html 标签,但用户可能会故意在帖子中包含 html 标签来演示或询问有关某些特定 HTML 代码的问题(如本网站上的许多示例所示)。如果你做一个strip-tags,就很难问这种问题了。
  • @Spudley :我完全同意,甚至出于同样的原因向开源项目提交了一个补丁。但是,自从第一篇文章第 2 段以来,这已包含在我的回答中,它可能已被遗漏。
【解决方案2】:

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 }}

【讨论】:

  • 我正在使用 django,所以这可能会很困难,但我对它有点不熟悉,所以......也许有可能,但我没有意识到。关于如何在 django 中执行此操作的任何想法?
  • 甜蜜。 Value|striptags 似乎非常适合我在应用程序中使用数据的方式。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-22
  • 1970-01-01
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多