Python输入清理

not*_*.no 8 python forms validation sanitization input

我需要做一些非常快速的脏输入消毒,我想基本上将所有转换<, >&lt;, &gt;.

我希望得到相同的结果,'<script></script>'.replace('<', '&lt;').replace('>', '&gt;')而不必多次迭代字符串.我知道maketransstr.translate(即http://www.tutorialspoint.com/python/string_translate.htm)相关但这仅从1个char转换为另一个char.换句话说,人们做不到这样的事情:

inList = '<>'
outList = ['&lt;', '&gt;']
transform = maketrans(inList, outList)
Run Code Online (Sandbox Code Playgroud)

是否有builtin可以在单次迭代中执行此转换的函数?

我想使用builtin功能而不是外部模块.我已经知道了Bleach.

Joe*_*ung 13

您可以使用 cgi.escape()

import cgi
inlist = '<>'
transform = cgi.escape(inlist)
print transform
Run Code Online (Sandbox Code Playgroud)

输出:

&lt;&gt;
Run Code Online (Sandbox Code Playgroud)

https://docs.python.org/2/library/cgi.html#cgi.escape

cgi.escape(s [,quote])将字符串s中的字符'&','<'和'>'转换为HTML安全序列.如果需要在HTML中显示可能包含此类字符的文本,请使用此选项.如果可选标志引用为true,则引号字符(")也会被翻译;这有助于包含在由双引号分隔的HTML属性值中,如下所示.请注意,单引号永远不会被翻译.

  • 正如其他评论中提到的,自 Python 3.2 (https://docs.python.org/3.7/library/cgi.html#cgi.escape) 起,此方法已被弃用。它建议使用 html.escape。 (2认同)

小智 6

使用 html.escape() - cgi.escape() 在 Python 3 中已弃用

import html
input = '<>&'
output = html.escape(input)
print(output)

&lt;&gt;&amp;
Run Code Online (Sandbox Code Playgroud)