Rails 3 - raw和html_safe的问题

Phi*_*egg 3 ruby-on-rails ruby-on-rails-3

在Rails 3.0.10中使用raw和html_safe方法,我仍然无法取消html并将其显示为Content而不是<strong>Content</strong>.

@object.property.html_safe 给我 <strong>Some content</strong>

<%= raw(@object.property) %> 也给了我 <strong>Some content</strong>

我看过这些帖子并试图实施他们的修复:

我还看过关于xss保护的Ryan Bates Railscasts插曲:http://railscasts.com/episodes/204-xss-protection-in-rails-3?view = comment

我创建了一个基于他的示例安全的帮助方法,我确保字符串内容应用了html_safe方法:

def safe(content)
    "#{content}".html_safe
end
Run Code Online (Sandbox Code Playgroud)

然后我在我的模型上调用它: safe(@object.property)

内容仍未按预期显示.

我也尝试过使用sanitize方法,但无济于事.

可能是什么导致了这个?

Phi*_*egg 8

好吧,看起来我现在已经开始工作了.

查看Ruby文档并找到了CGI类和unescapeHTML方法.

我在表单中使用富文本编辑器将文本保存到数据库.显然,因为html是作为转义发送到数据库的,所以我需要撤消转义,然后在其上调用html_safe.

这就是它在数据库中的显示方式: &lt;strong&gt;howdy&lt;/strong&gt;

我将它应用于我的帮助方法,现在html显示为html而不是标签.

def safe(content)
  "#{ CGI::unescapeHTML(content) }".html_safe
end
Run Code Online (Sandbox Code Playgroud)

这有效,但如果有更好的方法来处理这种情况,我愿意接受建议.

更新


我正在尝试使用Rails辅助方法来尝试防止文本被保存到数据库中(这将解决我的问题,因为那时我不必解除它).

事实证明,我正在使用的富文本编辑器是对html进行编码 - 您必须encoded: false在javascripts对象文字表示法中传递它的属性.

所以,如果你像我一样,拉着你的头发试图找出为什么Rails将文本保存为数据库编码 - 你可能实际上需要调整富文本编辑器本身的配置.

现在我可以删除CGI类,并将其用作帮助程序:

def safe(content)
  "#{ content }".html_safe
end
Run Code Online (Sandbox Code Playgroud)

希望其他人也会觉得这很有帮助.