转义Smalltalk字符串中的HTML标记

时间:2012-12-29 20:31:57

标签: smalltalk html-encode

我拼命想在Smalltalk中编写一个非常基本的方法来转义HTML标记('<'和'>')。

到目前为止,这是我提出的:

escapeHtml: str
    |tags newString tmpString|
    newString := String new.
    tags := Dictionary new.
    tags at: '<' put: '&lt;'.
    tags at: '>' put: '&gt;'.
    tags keysAndValuesDo:
    [ :k :v |
        tmpString := str copyReplaceAll: k with: v.
        newString := tmpString
    ].
    ^newString
!

不幸的是,它似乎只替换了tags字典的最后一项。我究竟做错了什么?我可能还应该指出,我对Smalltalk的经验很少。

选择的口译员是'syx'。

1 个答案:

答案 0 :(得分:3)

我认为你想要制作像

这样的东西
newString := str

然后在keysAndValuesDo:块:

tmpString := newString copyReplaceAll: k with: v.

因为您现在为每个键/值对生成tmpString,只更换了一个键。比你将它分配给newString。为了实现您的目标,您应该将copyReplaceAll:发送到在上一次迭代中处理的字符串。这可以通过向newString发送消息来完成,但是对于第一次迭代工作,您应该为其分配str的值。

<强> P.S。 我也认为这个更干净的版本应该有效:

escapeHtml: str
    |tags newString|
    newString := str copy.
    ...
    tags keysAndValuesDo: [ :k :v | newString replaceAll: k with: v ].
    ^newString