3

我目前使用以下代码在存储字符串之前对其进行清理:

ERB::Util::h(string)

当字符串已经像这样被清理时,我的问题就会出现:

string = "Watching baseball `&` football"

净化后的字符串将如下所示:

sanitized_string = "Watching baseball `&` football"

我可以通过替换将 < 变成&lt;和 > 来进行消毒吗?&gt;

4

4 回答 4

3

先转义,然后再转义:

require 'cgi'
string = "Watching baseball &amp; football"

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball &amp; football"
于 2009-10-21T20:54:55.570 回答
0

基于来自 Erubis 的此代码段的快速方法。

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' }
def custom_h(value)
   value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end
于 2009-10-21T20:55:04.367 回答
0

是的,你可以,或者更进一步,你可以使用这样的基本正则表达式删除整个标签:

mystring.gsub( /<(.|\n)*?>/, '' )
于 2009-10-21T20:55:21.273 回答
0

您可以编写自己的消毒剂,但在消毒中有很多极端情况和棘手的问题。

更好的方法可能是在对其进行消毒之前对您的字符串进行解编码 - h() 是否有一个逆向,您可以先将您的字符串通过?

于 2009-10-21T20:55:57.267 回答