Smalltalk字符串中的转义HTML标记
我正在拼命尝试在Smalltalk中编写一个非常基本的方法来逃避HTML标记(“”) 到目前为止,我的想法是:Smalltalk字符串中的转义HTML标记,smalltalk,html-encode,Smalltalk,Html Encode,我正在拼命尝试在Smalltalk中编写一个非常基本的方法来逃避HTML标记(“”) 到目前为止,我的想法是: escapeHtml: str |tags newString tmpString| newString := String new. tags := Dictionary new. tags at: '<' put: '<'. tags at: '>' put: '>'. tags keysAnd
escapeHtml: str
|tags newString tmpString|
newString := String new.
tags := Dictionary new.
tags at: '<' put: '<'.
tags at: '>' put: '>'.
tags keysAndValuesDo:
[ :k :v |
tmpString := str copyReplaceAll: k with: v.
newString := tmpString
].
^newString
!
escapeHtml:str
|标记新闻字符串tmpString|
newString:=字符串新建。
标记:=字典新建。
位于“”的标记放置:“”。
标记键和值DO:
[:k:v|
tmpString:=str copyReplaceAll:k和:v。
新闻字符串:=tmpString
].
^新闻字符串
!
不幸的是,它似乎只替换标记
字典的最后一项。我做错了什么?我可能还应该指出,我对Smalltalk几乎没有经验
选择的解释器是‘syx’。我想你想做一些类似的东西
newString := str
然后在键和值do:
块中:
tmpString := newString copyReplaceAll: k with: v.
因为现在您正在为每个键/值对生成一个tmpString
,并且只替换了一个键。然后将其分配给新闻字符串
。为了实现您的目标,您应该将copyReplaceAll:
发送到上一次迭代中处理的字符串。这可以通过向newString
发送消息来完成,但对于第一次迭代,您应该为其分配str
的值
p.S.
我还认为这个更干净的版本应该可以:
escapeHtml: str
|tags newString|
newString := str copy.
...
tags keysAndValuesDo: [ :k :v | newString replaceAll: k with: v ].
^newString
我很尴尬,我没能早点意识到我在复制同样的字符串。非常感谢。它现在确实起作用了。:-)@我还在答案中添加了关于算法的建议,也许你会喜欢;)我很感激,但不幸的是,syx似乎没有就地replaceAll的定义(
#String:replaceAll:with:
),因此我不得不坚持使用旧代码(但是,我去掉了多余的tmpString
变量)。我再次表示感谢,但syx只是缺少适当的方法。