Ruby on Rails 的 content_for 会自动进行 HTML 转义吗?

nop*_*ole 6 ruby-on-rails content-for ruby-on-rails-3

使用 Rails 3.0.6,我发现在视图中,如果我执行

content_for :food_name, "Macaroni & Cheese"
Run Code Online (Sandbox Code Playgroud)

然后,当我使用 取回它时content_for(:food_name),就会已经将其&制成&。即使我做了 a 也没关系content_for(:food_name).html_safe,它&仍然已经制成了&

但如果按照以下方式完成,则不会转义:

content_for :food_name, "Macaroni & Cheese".html_safe
Run Code Online (Sandbox Code Playgroud)

在这种情况下,&不会&amp;自动更改为。现在,因为有些地方我实际上做了 a#{h content_for(:food_name)}并且它将被转义两次(成为&amp;amp;),或者 因为我在描述中有值,所以调用某些值而不调用其他值<meta>会很奇怪h

另外,一个大问题是,如果它自动转义,如果我添加" - come see us!"到它的末尾,并依靠 Rails 3 来转义它,那么现在, the&被转义了两次

在文档中content_for

http://api.rubyonrails.org/classes/ActionView/Helpers/CaptureHelper.html#method-i-content_for

我没有看到任何这样的描述。那么上面的描述是正确的还是文档更正确——事实上没有自动 HTML 转义?

从上面网页的源代码来看,似乎content_for调用了capture,并且执行了ERB::Util.html_escape,所以实际上存在自动转义,但真的应该存在吗?为什么?是否也没有记录capture 自动转义?

Jat*_*tra 3

<%= raw some_stuff %>当您不希望 Rails 转义这些字符时 使用,否则使用简单调用。

您始终知道内容可能在哪些区域,如果转义则可能会被修改,因此您可以简单地适应raw这些地方。

有关更多信息,请参阅 Yehuda katz 撰写的这篇非常精彩的文章。
安全缓冲区和轨道-3-0

  • 虽然还有一些其他信息,但我希望了解“content_for”的行为 (2认同)