我目前使用以下代码在存储字符串之前对其进行清理:
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() 是否有一个逆向,您可以先将您的字符串通过?