我正在尝试从数据库中收集一些信息,目前用户填写表单,文本框也相应地填写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 %>
答案 0 :(得分:2)
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
,它只允许一组特定的标签并清理其余部分,这是允许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 %>