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