使用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)}
,它将被转义两次(成为&
),或者
因为我在<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
做了什么
自动逃生?
答案 0 :(得分:3)
当您不希望Rails转义这些字符时使用<%= raw some_stuff %>
,否则请使用简单调用。
您始终知道内容可以是哪些区域,如果转义可以修改,因此您可以在raw
处放置这些内容。
有关更多信息,请参阅Yehuda katz撰写的这篇非常好的文章 safebuffers-and-rails-3-0