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

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

content_for :food_name, "Macaroni & Cheese" 

然后,当我使用content_for(:food_name)将其恢复时,然后&将进入& 已经。 如果我做一个content_for(:food_name).html_safe&仍然是& 已经。

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

 content_for :food_name, "Macaroni & Cheese".html_safe 

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

此外,一个重要的问题是, 如果它自动逃脱,如果我添加" - come see us!"该怎么办" - 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会自动逃脱?

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

你总是知道内容可以是这样的区域,如果被转义可以修改,所以你可以简单地适应那些地方的raw

有关更多信息,请参阅Yehuda katz撰写的这篇非常好的文章。
safebuffers和护栏,3-0

Interesting Posts