【问题标题】:Ruby Sanitize Code ... why is & sanitizedRuby Sanitize Code ... 为什么是 & sanitized
【发布时间】:2010-12-08 21:05:24
【问题描述】:

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

ERB::Util::h(string)

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

string = "Watching baseball `&` football"

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

sanitized_string = "Watching baseball `&` football"

我可以通过替换将 < 和 > 变成 > 来消毒吗?

【问题讨论】:

  • 看起来像一个奇怪的用例......你对事物进行多次消毒吗?否则,& 有什么问题,如果你知道你会在需要的时候反转它?

标签: ruby sanitize


【解决方案1】:

先转义,再转义:

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

CGI.escapeHTML(CGI.unescapeHTML(string))

=> "Watching baseball & football"

【讨论】:

  • 感谢大家的帮助! .. 我会尝试 unescape 第一个答案。
【解决方案2】:

基于this snippet from Erubis 的快速方法。

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 2016-01-17
        • 2016-01-10
        • 1970-01-01
        • 1970-01-01
        • 2010-09-14
        • 2015-08-30
        • 2011-09-10
        • 2022-12-14
        • 1970-01-01
        相关资源
        最近更新 更多