Rails - 输出内容,清理或<%= h?

时间:2011-01-14 00:01:31

标签: ruby-on-rails sanitize

我最近制作了一个小型rails3应用程序来转换用另一种语言编写的旧cms。迁移内容后,我在从数据库输出内容时遇到问题。

@ content.desc字段有时会有html。目前我能让它发挥作用的唯一方法是:

<%= sanitize content.desc %>

但这是最好的方法吗?当我使用<%=h @content.desc %>时,我仍然可以看到html标签。当我使用<%= simple_format @content.desc %>时,我会得到邪恶的间距。

在输出内容时我能看到所有选项的某个权威指南吗?我已经尝试过搜索,但无法解决任何问题(rails newb,我知道)。

3 个答案:

答案 0 :(得分:5)

默认情况下,任何未标记为“安全”的字符串都将在Rails 3中进行HTML转义。某些方法(例如sanitizehlink_to和许多其他帮助程序将返回安全字符串,从而允许它们按字面编写。有关详细信息,请参阅this blog post

如果您确定@content.desc中包含的HTML是安全的,您可以这样标记:<%= @content.desc.html_safe %>

答案 1 :(得分:2)

Rails 3已将HTML清理更改为默认启用。如果您确定您正在呈现的字符串是安全的,则可以使用

<%= @content.desc.html_safe! %>

答案 2 :(得分:0)

除非我弄错了,否则你不必在显示之前清理内容,因为Rails 3在默认情况下会这样做。更多信息:http://yehudakatz.com/2010/02/01/safebuffers-and-rails-3-0/