Rails嵌入语法疑问

时间:2010-08-31 08:36:58

标签: ruby-on-rails

我现在一直在工作ROR .. 我对ROR很新。

有人能告诉我<%=%>之间的区别吗?和<%= h%>

为什么我们在这里?

在某些情况下我见过t而不是h ..

请澄清我

3 个答案:

答案 0 :(得分:2)

<%=h %>语法会转义会破坏您网页的字符(例如'&amp;')。它实际上是一个名为'h'的辅助方法。所以:

<%=h "Ann & Bill" %> 

将扩展为Ann &amp; Bill

<%= "Ann & Bill" %>

将扩展为Ann & Bill,这可能不是您想要的HTML格式。

答案 1 :(得分:2)

<%=%>之间的所有内容都被评估为Ruby代码,并且生成的字符串将插入到文档中(实际上是ERb,它可以用于任意文档,而不仅仅是HTML)。在这种情况下,它调用一个名为simple h的方法来转义其参数。所以我猜你所看到的更像是<%=h @somevar%>。因此@somevar的内容由方法h转义,并且返回字符串将插入整个表达式的位置。

存在的其他ERb语法是<% ... %>来评估Ruby代码,但没有将结果插入到文档中,然后还有<% ... -%><%= ... -%>来抑制后续换行,因此避免渲染文档中的空白。

答案 2 :(得分:1)

现在已经发布了Rails 3,请注意此处的默认行为是自动转义&lt;%=%&gt;内的所有内容。标签。因此,XSS(跨站点脚本)保护始终开启,使用&lt;%= h%&gt;多余的。如果/当您从Rails 2升级应用程序时,这可能会让您感到厌烦。

这个Railscast(http://railscasts.com/episodes/204-xss-protection-in-rails-3)为上面提供了一个很好的入门。

如果您希望在Rails 2.3应用中使用此行为,则可以使用http://github.com/rails/rails_xss(适用于2.3.8)或http://github.com/NZKoz/rails_xss(适用于2.3.5)