我在Rails中有一个RHTML视图,其中的输出来自我的MongoDB集合。使用迭代块可以正确地输出数据,但是每当我尝试在数据库中使用HTML标记时,它们不会呈现在HTML输出中,而只是显示出来。
<%
@posts.find().each do |post|
%>
<h1><%=post["name"]%></h1>
<p><%=post["body"] %></p>
<p><%=post["timestamp"]%></p>
<%
end
%>但是,举个例子,如果我
<p>Test</p>在我的数据库中,标签将被呈现,而不是打印。
发布于 2010-12-15 21:22:06
这是一个安全预防措施,现在已经内置于Rails3中。它可以防止XSS (跨站点脚本)问题。
如果你添加raw,你会得到你想要的输出。
<% @posts.each do |post| %>
<h1><%=raw post["name"]%></h1>
<p><%=raw post["body"] %></p>
<p><%=raw post["timestamp"]%></p>
<% end %> 但是,如果您存储的是用户创建的任意HTML,我不建议您这样做,除非您在将输入存储到数据库之前对其进行了消毒。
编辑:
另一种选择:使用sanitize helper代替raw,例如<%=sanitize post["name"], :tags => "p" %>,以允许<p>标记。
发布于 2010-12-15 21:53:54
除了给予用户输入100%信任的raw和.html_safe之外,您还可以使用sanitize来限制允许的标记数量。
<%=清理post"name“$>
有关详情,请参阅:http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
https://stackoverflow.com/questions/4450253
复制相似问题