首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >RHTML在输出上显示HTML标记

RHTML在输出上显示HTML标记
EN

Stack Overflow用户
提问于 2010-12-15 21:15:05
回答 2查看 2.4K关注 0票数 3

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

代码语言:javascript
运行
复制
<%
 @posts.find().each do |post|
%>
 <h1><%=post["name"]%></h1>
 <p><%=post["body"] %></p>
 <p><%=post["timestamp"]%></p>
<%
 end
%>

但是,举个例子,如果我

代码语言:javascript
运行
复制
<p>Test</p>

在我的数据库中,标签将被呈现,而不是打印。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-15 21:22:06

这是一个安全预防措施,现在已经内置于Rails3中。它可以防止XSS (跨站点脚本)问题。

如果你添加raw,你会得到你想要的输出。

代码语言:javascript
运行
复制
<% @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>标记。

票数 6
EN

Stack Overflow用户

发布于 2010-12-15 21:53:54

除了给予用户输入100%信任的raw.html_safe之外,您还可以使用sanitize来限制允许的标记数量。

<%=清理post"name“$>

有关详情,请参阅:http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4450253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档