2010-08-31 52 views
0

我一直在努力ROR .. 我是很新的ROR ..Rails的嵌入语法疑问

谁能告诉我是什么<%=%之间的差额>和<%= H%>

为什么我们在这里?

在某些情况下,我已经看到了一下T^h ..

请澄清我

回答

2

<%=h %>语法转义字符,否则会弄乱你的页面(例如“&”)。它实际上是一个称为'h'的辅助方法。所以:

<%=h "Ann & Bill" %> 

将扩大到Ann &amp; Bill

<%= "Ann & Bill" %> 

将扩大到Ann & Bill,这可能不是你在你的HTML想要的东西。

+2

你可能想引号添加到您的字符串,还是你意思是二元 - 常量Ann和Bill? :-) – DarkDust 2010-08-31 08:50:24

2

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

存在其他ERb的语法是<% ... %>评估Ruby代码但不插入结果到文档中,然后有也<% ... -%><%= ... -%>抑制随后的换行,从而避免了所呈现的文档中的间隙。

1

现在Rails 3已经发布了,请注意,从这里开始的默认行为是自动转义<%=%>标记中的所有内容。因此,XSS(跨站点脚本)保护始终处于开启状态,因此使用冗余。这可能会咬你,如果/当你从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)