gpt4 book ai didi

ruby-on-rails - Rails 3 - raw 和 html_safe 的问题

转载 作者:行者123 更新时间:2023-12-04 03:38:07 28 4
gpt4 key购买 nike

在 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=comments

我根据他的示例创建了一个名为 safe 的辅助方法,我确保字符串内容应用了 html_safe 方法:

def safe(content)
"#{content}".html_safe
end

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

内容仍然没有按预期显示。

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

这可能是什么原因造成的?

最佳答案

好的,看来我现在可以使用它了。

查看 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

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

关于ruby-on-rails - Rails 3 - raw 和 html_safe 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9571646/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com