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方法,但无济于事.
可能是什么导致了这个?
好吧,看起来我现在已经开始工作了.
查看Ruby文档并找到了CGI类和unescapeHTML方法.
我在表单中使用富文本编辑器将文本保存到数据库.显然,因为html是作为转义发送到数据库的,所以我需要撤消转义,然后在其上调用html_safe.
这就是它在数据库中的显示方式: <strong>howdy</strong>
我将它应用于我的帮助方法,现在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)
希望其他人也会觉得这很有帮助.
| 归档时间: |
|
| 查看次数: |
4450 次 |
| 最近记录: |