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

时间:2011-04-27 22:38:31

标签: ruby-on-rails ruby-on-rails-3 content-for

使用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

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

另外,一个很大的问题是,如果它自动转义,如果我将" - come see us!"添加到它的末尾,并依赖Rails 3来逃避它,那么现在,{{1转义两次

&文档中:

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

我没有看到任何这样的描述。以上描述也是正确的 或者文档是否更正确 - 实际上没有自动HTML转义?

似乎从上面网页上的源代码中,content_for调用了content_for,它执行了capture, 所以实际上有一个自动逃生,但应该真的有,为什么?是否还没有记录ERB::Util.html_escape做了什么 自动逃生?

1 个答案:

答案 0 :(得分:3)

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

您始终知道内容可以是哪些区域,如果转义可以修改,因此您可以在raw处放置这些内容。

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