我正在尝试实现HTML转义函数
这是我的代码:
def escape_html(s):
for x in s:
if x == '>':
x = ">"
elif x == '<':
x = "<"
elif x == ' " ':
x = """
return s
s = "dasdasdas > < "
print escape_html(s)
我的输出与我的输入完全相同。为什么不替换字符?
预期产出:
dasdasdas > <
实际输出:
dasdasdas > <
答案 0 :(得分:1)
for
循环迭代给定的迭代,并在每次in
之前通过循环设置变量。它是一个像其他任何变量一样的变量。如果你试过这个:
my_list = [1, 2, 3]
x = my_list[1]
x = 5
然后你最后没有my_list
等于[1, 5, 3]
;不,而不是改变你x
的位置,你只需重新绑定x
。您的x
遇到了同样的问题。您需要以某种方式明确地将其重新放回s
。
无论如何,如果您想要实际转义HTML,只需使用cgi.escape
。
答案 1 :(得分:0)
除了@icktoofay所说的,x
将承担s
中每个角色的价值。你怎么期望一个角色等于' " '
?您可能应该使用索引。以下是您的功能的修改版本,它可以满足您的需求(但仍然非常不完整,cgi.escape
是最佳方式):
>>> def escape_html(s):
x = ''
for i in range(len(s)):
if s[i] == '>':
x += ">"
elif s[i] == '<':
x += "<"
elif s[i:i + 3] == ' " ':
x += """
else:
x += s[i]
return x
>>> print escape_html("dasdasdas > < ")
dasdasdas > <