从数据库返回的代码显示HTML代码

时间:2015-09-03 10:34:52

标签: html ruby-on-rails database

我正在尝试从数据库中收集一些信息,目前用户填写表单,文本框也相应地填写html格式。

问题是当它传递到数据库时,它将保存为

<p>How would this work?</p><p><br/></p><p>I need to know, IF the HTML formatting is here</p><p><br/></p><h1>unfortunatly it may stick</h1><h4>Although it might not,</h4><p>Only time will tell, If the <b>Font </b><i>Stays </i><u>or </u><strike>not</strike></p>

我遇到的问题是,当我调用它时,它会被放回到显示为相同的页面中,而不是保留格式。

我正在使用Rails来调用数据库,所以我的小代码就是调用数据库

<% @events.each do |ev| %>
<%= ev.details %>
<% end %>

2 个答案:

答案 0 :(得分:2)

html_safe

Rails默认转义所有文本以防止任何注入和此类攻击,如果您知道数据是安全的,那么告诉rails它是,只需将html_safe添加到字符串

<% @events.each do |ev| %>
  <%= ev.details.html_safe %>
<% end %>

原始

请注意#html_safe是一个String帮助器,因此它适用于String个对象,如果由于任何原因这个字符串可能是nil个对象,那么它会引发错误undefined method html_safe for nil

在这种情况下,使用raw可能更安全,因为它会为nil返回一个空字符串,而不是引发错误。

内部raw来电#to_s然后将结果字符串标记为html_safe,在nil情况下将nil转换为空字符串,然后将其标记为安全。

<% @events.each do |ev| %>
  <%= raw ev.details %>
<% end %>

的sanitize

您可能还想考虑使用sanitize,它只允许一组特定的标签并清理其余部分,这是允许html渲染和防止恶意标记之间的一个很好的组合,您可以阅读有关清理帮助器的信息{ {3}}

清理nil对象会返回nil,我会说这是安全的,因为puts会在#to_s对象上调用nil,这会将nil转换为空字符串。

<% @events.each do |ev| %>
  <%= sanitize ev.details %>
<% end %>

答案 1 :(得分:1)

使用raw方法Reference

<% @events.each do |ev| %>
  <%= raw(ev.details) %>
<% end %>