RHTML在输出上显示HTML标记

Sco*_*col 3 ruby views ruby-on-rails rhtml ruby-on-rails-3

我在Rails中有一个RHTML视图,其输出来自我的MongoDB集合.使用迭代块正确输出数据,但每当我尝试在我的数据库中使用HTML标记时,它们都不会在HTML输出中呈现,而只是显示它们.

<%
 @posts.find().each do |post|
%>
 <h1><%=post["name"]%></h1>
 <p><%=post["body"] %></p>
 <p><%=post["timestamp"]%></p>
<%
 end
%>
Run Code Online (Sandbox Code Playgroud)

但是,例如,如果我有

<p>Test</p>
Run Code Online (Sandbox Code Playgroud)

在我的数据库中,标记将被渲染,而不是被打印.

Mar*_*mas 6

这是一个安全预防措施,现已内置到Rails 3中.它可以防止XSS(跨站点脚本)问题.

如果你添加raw你将获得你想要的输出.

<% @posts.each do |post| %> 
 <h1><%=raw post["name"]%></h1> 
 <p><%=raw post["body"] %></p> 
 <p><%=raw post["timestamp"]%></p> 
<% end %> 
Run Code Online (Sandbox Code Playgroud)

但是,如果您要存储用户创建的任意HTML,我建议您不要这样做,除非您在将输入存储到数据库之前清理输入.

编辑:

另一种选择:使用sanitize助手代替raw,例如<%=sanitize post["name"], :tags => "p" %>允许<p>标签.