Ruby清理代码...为什么要进行&的清理处理

3

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

ERB::Util::h(string)

当字符串已经被清理过,像这样:

string = "Watching baseball `&` football"

经过处理后的字符串看起来像这样:
sanitized_string = "Watching baseball `&` football"

我只需要通过替换将 < 替换成 &lt;,将 > 替换成 &gt; 就可以进行消毒吗?


1
看起来是一个奇怪的用例...你会对变量进行多次消毒吗?否则,如果你知道什么时候需要反转它,那么&amp;amp;有什么问题呢? - ykaganovich
4个回答

3

首先进行反转义,然后再进行转义:

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

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball &amp; football"

谢谢大家的帮助!我会先尝试unescape第一个答案。 - tdewell

0

基于 Erubis 的这个片段 的快速方法。

ESCAPE_TABLE = { '<'=>'&lt;', '>'=>'&gt;' }
def custom_h(value)
   value.to_s.gsub(/[<>]/) { |s| ESCAPE_TABLE[s] }
end

0

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

mystring.gsub( /<(.|\n)*?>/, '' )

0

你可以编写自己的过滤器,但在过滤时会有很多边角情况和棘手的问题。

更好的方法可能是在过滤之前对字符串进行解码 - h()函数是否有一个反函数可以先将字符串通过它处理一遍?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接