【问题标题】:Disable HTML escaping in erb templates在 erb 模板中禁用 HTML 转义
【发布时间】:2011-06-09 15:04:03
【问题描述】:

在 Rails 3 应用程序中,我有一个域类,其中一个属性存储纯 HTML 内容(它是一个博客应用程序,域类是 Post)。

在 ERB 模板中,我需要显示属性的内容,因为它被格式化,并带有 HTML 标记。但是,Rails 正在转义所有 HTML 标签!如何为此类属性禁用此行为?

例子:

somePost = Post.new
somePost.content = "<strong> Hi, i'm here! </strong>"

在erb模板中:

<%= somePost.content %>

生成的 HTML 被转义:

&lt;strong&gt; Hi, i'm here! &lt;/strong&gt;

【问题讨论】:

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


    【解决方案1】:

    尝试使用raw(somePost.content)。或者,somePost.content.html_safe

    【讨论】:

    • 恕我直言,raw 比 .html_safe 安全一点,因为 raw(nil) 写入 "",其中 nil.html_safe 会导致异常。
    • .html_safe 是 Rails 的一个实现细节,并不适用于面向公众的 API。应该改用raw(string) 方法。 groups.google.com/forum/#!topic/rubyonrails-core/T9N5wexIg80
    • raw 包含在 html_safe 中。他们做同样的事情,除了 raw 也调用 .to_s。
    【解决方案2】:

    使用raw(string),作为described in the release notes

    7.4.3 其他更改

    您不再需要调用 h(string) 来转义 HTML 输出,它在所有视图模板中默认启用。如果您想要未转义的字符串,请调用 raw(string)。

    基本上,你在哪里做的

    <%=h @model.attr %>
    

    现在可以使用之前

    <%= @model.attr %>
    

    以及在您现在可以使用之前那个在哪里

    <%=raw @model.attr %>
    

    【讨论】:

      【解决方案3】:

      使用双等号意味着结果不会被转义...

      <%== somePost.content %>
      

      看到这个关于它的 SO 问题 - What does <%== %> do in rails erb?

      【讨论】:

      • 这是我一直在寻找的答案,而不是公认的答案 :) 这基本上等同于 HAML 模板中的 using !=(而不仅仅是 =)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多