转义字符和原始字符串

时间:2015-03-12 20:18:23

标签: python python-2.7

我想用">"替换">"。其他符号也一样。

def escape_html(s):
    s = s.replace(">", r">")
    s = s.replace("<", "&lt;")
    s = s.replace('"', "&quot;")
    s = s.replace('&', "&amp;")
    return s

print escape_html(">")

结果为&amp;gt;

但我需要&gt;

你能帮我理解为什么原始字符串对我不起作用。我该如何编写代码?

1 个答案:

答案 0 :(得分:2)

您需要先替换&

def escape_html(s):
    s = s.replace('&', "&amp;")
    s = s.replace(">", "&gt;")
    s = s.replace("<", "&lt;")
    s = s.replace('"', "&quot;")
    return s

因为否则您将替换您所做的每个其他替换中的&。这与Python原始字符串文字无关;只会禁用\ - 样式转义。

您也可以使用cgi.escape() function;将第二个参数设置为True以使其转义引号。

演示:

>>> def escape_html(s):
...     s = s.replace('&', "&amp;")
...     s = s.replace(">", "&gt;")
...     s = s.replace("<", "&lt;")
...     s = s.replace('"', "&quot;")
...     return s
... 
>>> escape_html('<script>alert("Oops & bummer!")</script>')
'&lt;script&gt;alert(&quot;Oops &amp; bummer!&quot;)&lt;/script&gt;'
>>> import cgi
>>> cgi.escape('<script>alert("Oops & bummer!")</script>', True)
'&lt;script&gt;alert(&quot;Oops &amp; bummer!&quot;)&lt;/script&gt;'