我目前使用以下代码在存储字符串之前对其进行清理:
ERB::Util::h(string)
当字符串已经被清理过,像这样:
string = "Watching baseball `&` football"
经过处理后的字符串看起来像这样:
sanitized_string = "Watching baseball `&` football"
我只需要通过替换将 < 替换成 <
,将 > 替换成 >
就可以进行消毒吗?
首先进行反转义,然后再进行转义:
require 'cgi'
string = "Watching baseball & football"
CGI.escapeHTML(CGI.unescapeHTML(string))
=> "Watching baseball & football"
基于 Erubis 的这个片段 的快速方法。
ESCAPE_TABLE = { '<'=>'<', '>'=>'>' }
def custom_h(value)
value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
可以的,或者更进一步,您可以像这样使用基本正则表达式删除整个标签:
mystring.gsub( /<(.|\n)*?>/, '' )
你可以编写自己的过滤器,但在过滤时会有很多边角情况和棘手的问题。
更好的方法可能是在过滤之前对字符串进行解码 - h()函数是否有一个反函数可以先将字符串通过它处理一遍?
&amp;
有什么问题呢? - ykaganovich