我无法理解为什么这段代码没有给我预期的结果,即替换像>这样的特殊字符。他们的特殊序列如>
def escape_html(s):
for (i,o) in ((">",">"),
('<','<'),
('"','"'),
('&','&')):
s.replace(i,o)
return s
print escape_html('>')
print escape_html('<')
print escape_html('"')
print escape_html("&")
print escape_html("test&test")
特别是因为我从this Udacity课程
复制粘贴此代码代码提供此输出
>
<
"
&
test&test
而不是用它们的转义序列替换这些特殊字符。
我知道Python已经内置了对escape_html函数的支持,但是我想知道我做错了什么?
答案 0 :(得分:3)
您忽略了str.replace()
的返回值:
s.replace(i,o)
将s
设置为结果:
s = s.replace(i,o)
字符串是不可变的,因此所有字符串方法都返回 new 字符串对象。
接下来,您必须将('&','&')
替换件移至顶部;否则,您将替换&
,>
和<
中的"
。
演示:
>>> def escape_html(s):
... for (i,o) in (
... ('&','&'),
... (">",">"),
... ('<','<'),
... ('"','"')):
... s = s.replace(i,o)
... return s
...
>>> print escape_html('>')
>
>>> print escape_html('<')
<
>>> print escape_html('"')
"
>>> print escape_html("&")
&
>>> print escape_html("test&test")
test&test