如何呈现通过表单提交的HTML?

时间:2014-05-26 17:04:13

标签: javascript ruby-on-rails ruby html5 contenteditable

如何呈现通过表单提交的HTML?

我正在使用Rails 4应用程序构建文本编辑器。我正在使用javascript将内容可编辑的数据传递到我的表单中以保存到数据库中。到目前为止都很好。

除了用户保存的文本外,还包括HTML ...所以我保存的内容如下所示:

<header class="header" contenteditable="true">
        This is a title
      </header>

<article class="content" contenteditable="true">This is the body<br></article>

当我在#index或#edit中显示内容时,HTML将作为普通文本发布。

如何让它渲染?

1 个答案:

答案 0 :(得分:2)

当您在页面上显示时,您看到HTML标记等的原因是因为默认情况下,Rails可以保护您免受恶意数据的攻击并转义HTML标记。你可以通过确保文本安全&#34;来解决这个问题。拳头。 @bjhaid在评论中建议的方式(简单地使用raw()对用户提供的内容不利,因为它基本上只信任内容 - 可能是任何内容,包括从用户处获取数据或获取数据的脚本标记访问您的服务器。

清理用户提供的内容的最佳方法是:

<%= sanitize(the_user_supplied_content) %>

sanitize帮助程序将删除危险的标记和属性,然后将该字符串标记为安全,以便其余内容可以通过非转义。

<强>更新

添加属性,以便sanitize帮助程序不会删除它:

# config/application.rb
config.action_view.sanitized_allowed_attributes = "my_new_attribute"

另请参阅api docs for sanitized_allowed_attributes