在Rails 3.0.10中使用raw和html_safe方法,我仍然无法取消html并将其显示为内容而不是<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=comments
我根据他的名为 safe 的示例创建了一个帮助方法,其中我确保字符串内容应用了html_safe方法:
def safe(content)
"#{content}".html_safe
end
然后我在我的模型上调用它:safe(@object.property)
内容仍未按预期显示。
我也尝试过使用清理方法,但无济于事。
导致这种情况的原因是什么?
答案 0 :(得分:8)
好的,看起来我现在已经开始工作了。
查看Ruby文档并找到 CGI 类和 unescapeHTML 方法。
我在表单中使用富文本编辑器将文本保存到数据库中。显然,由于html是作为转义发送到数据库的,我需要撤消转义,然后在其上调用html_safe。
这就是它在数据库中的显示方式:<strong>howdy</strong>
我将它应用于我的帮助方法,现在html显示为html而不是标记。
def safe(content)
"#{ CGI::unescapeHTML(content) }".html_safe
end
这样可行,但如果有更好的方法来处理这种情况,我可以接受建议。
<强>更新强>
我正在尝试使用Rails帮助程序方法来尝试阻止文本被转义保存到数据库中(这样可以解决我的问题,从那时起我就不必解除它了。)
事实证明,我使用的富文本编辑器是对html进行编码 - 您必须在javascripts对象文字表示法中为其传递encoded: false
的属性。
所以,如果你像我一样,并试图找出为什么Rails将文本保存为数据库编码 - 你可能实际上需要调整富文本编辑器本身的配置。
现在我可以删除CGI类,并将其用作帮助程序:
def safe(content)
"#{ content }".html_safe
end
希望其他人也会觉得这很有帮助。
答案 1 :(得分:0)