在 Python 中转义 HTML 的最简单方法是什么?

新手上路,请多包涵

cgi.escape 似乎是一种可能的选择。效果好吗?有什么被认为更好的东西吗?

原文由 Josh Gibson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 326
2 个回答

html.escape 现在是正确答案,在 3.2 之前的 python 中它曾经是 cgi.escape 。它逃脱了:

  • <&lt;
  • >&gt;
  • &&amp;

这对所有 HTML 来说已经足够了。

编辑:如果您有非 ascii 字符,您也想转义,以便包含在另一个使用不同编码的编码文档中,如 Craig 所说,只需使用:

 data.encode('ascii', 'xmlcharrefreplace')

不要忘记解码 dataunicode 首先,使用它被编码的任何编码。

但是,根据我的经验,如果您从一开始就一直使用 unicode ,那么这种编码是无用的。只需在末尾编码为文档标头中指定的编码( utf-8 以获得最大兼容性)。

例子:

 >>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'&lt;a&gt;b&#225;&lt;/a&gt;

同样值得注意(感谢 Greg)的是额外的 quote 参数 cgi.escape 需要。将其设置为 Truecgi.escape 也会转义双引号字符( " ),因此您可以在 XML/HTML 中使用结果值。

编辑:请注意,cgi.escape 在 Python 3.2 中已被弃用,取而代之的是 html.escape ,除了 quote 默认为 True。

原文由 nosklo 发布,翻译遵循 CC BY-SA 4.0 许可协议

在 Python 3.2 中引入了一个新的 html 模块,用于转义 HTML 标记中的保留字符。

它有一个功能 escape()

 >>> import html
>>> html.escape('x > 2 && x < 7 single quote: \' double quote: "')
'x &gt; 2 &amp;&amp; x &lt; 7 single quote: &#x27; double quote: &quot;'

原文由 Maciej Ziarko 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题