5

使用 Rails 3.0.6,我发现在视图中,如果我做一个

content_for :food_name, "Macaroni & Cheese"

然后当我用 取回它时content_for(:food_name)&就会变成&已经。我做 a 没关系content_for(:food_name).html_safe&仍然已经做成&了。

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

content_for :food_name, "Macaroni & Cheese".html_safe

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

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

content_for文档中:

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

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

从上面网页的源代码看来,content_for调用capture,它做了一个ERB::Util.html_escape,所以实际上有一个自动转义,但真的应该有,为什么?是否也没有记录capture 自动逃逸?

4

1 回答 1

3

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

您总是知道内容可能存在的区域,如果转义可以修改,因此您可以简单地适应raw这些地方。

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

于 2011-04-27T23:14:18.737 回答