【问题标题】:Problem with escaping HTML characters in Rails 3在 Rails 3 中转义 HTML 字符的问题
【发布时间】:2011-05-08 13:01:59
【问题描述】:

在我看来,我使用foo 辅助函数:

 <%= foo ["hello", "stack", "overflow"] %>

foo 定义如下:

def foo(arr)
  result = ''
  arr.each do |a|
    result += content_tag(:div, a)
  end
  result
end

页面呈现:

<div>hello</div><div>stack</div><div>overflow</div>

但是,如果将foo的定义改为:

def foo(arr)
  content_tag(:div, arr[0]) + content_tag(:div, arr[1]) + content_tag(:div, arr[2])
end

我得到了预期的结果:

hello
stack
overflow

您将如何修正上述foo 的定义以获得预期结果? (即我不希望字符被转义)

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 escaping helpermethods


    【解决方案1】:

    试试这个:

    def foo(arr)
      result = ''
      arr.each do |a|
        result += content_tag(:div, a)
      end
      raw result
    end
    

    编辑。

    为了更清楚,您正在创建一个字符串,Rails 不知道它是否可以安全显示。 更准确地说,Rails 毫不怀疑它创建的 content_tags。

    所以你可以解决你的问题,告诉 Rails 你的初始化字符串是安全的:

    def foo(arr)
      result = ''.html_safe
      arr.each do |a|
        result += content_tag(:div, a)
      end
      result
    end
    

    【讨论】:

    • 谢谢。它解决了这个问题。但是,我仍然想知道为什么需要raw。请您详细说明一下吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-04
    • 2011-05-19
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    相关资源
    最近更新 更多