1

我正在尝试实现 HTML 转义功能

这是我的代码:

def escape_html(s):
    for x in s:
        if x == '>':
            x = "&gt"
        elif x == '<':
            x = "&lt"
        elif x == ' " ':
            x = "&quot"
    return s

s = "dasdasdas > < "
print escape_html(s)

我的输出与我的输入完全相同。为什么字符没有被替换?

预期输出:

dasdasdas &gt &lt 

实际输出:

dasdasdas > < 
4

2 回答 2

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.

于 2013-04-16T04:25:47.173 回答
0

连同@icktoofay 所说x的,将采用s. 你如何期望一个字符等于' " '?您可能应该改用索引。这是您的功能的修改版本,可以满足您的需求(但是它仍然非常不完整,并且cgi.escape将是最好的方法):

>>> def escape_html(s):
        x = ''
        for i in range(len(s)):
            if s[i] == '>':
                x += "&gt"
            elif s[i] == '<':
                x += "&lt"
            elif s[i:i + 3] == ' " ':
                x += "&quot"
            else:
                x += s[i]
        return x


>>> print escape_html("dasdasdas > < ")
dasdasdas &gt &lt 
于 2013-04-16T04:48:09.563 回答