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

标签 javascript ruby-on-rails ruby html 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 将作为普通文本发布。

如何让它渲染?

最佳答案

您在页面上显示时看到 HTML 标记等的原因是,Rails 默认情况下会保护您免受恶意数据的侵害并转义 HTML 标记。您可以通过确保文本是“安全”的来解决这个问题。 @bjhaid 在评论中建议的方式(简单地使用 raw() 对于用户提供的内容来说是不利的,因为它本质上只是信任内容 - 可以是任何内容,包括用于钢化数据的脚本标记来自您的用户或获得对您服务器的访问权限。

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

<%= sanitize(the_user_supplied_content) %>

sanitize helper 将删除危险的标签和属性,然后将字符串标记为安全,以便其余内容可以不转义。

更新

添加一个属性,使其不会被清理助手删除:

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

另请参阅api docs for sanitized_allowed_attributes .

关于javascript - 如何呈现通过表单提交的 HTML?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23874803/

相关文章:

ruby-on-rails - client_side_validations 'Cannot read property ' 用户[电子邮件 ]' of undefined'

ruby-on-rails - Oauth2 提供者(Doorkeeper?)是用于登录的 Oauth2 使用者(Devise+OmniAuth)

ruby-on-rails - 如何为包含 Devise update_with_password 方法的方法编写通过测试?

ruby-on-rails - 如何在 erb 中使用带有枚举的 block

javascript - 如何推迟 fullPage.js 滚动?

javascript - 同构应用程序中的用户配置文件

ruby-on-rails - 使用 stock_quote gem 中的股票报价作为 acts_as_taggable gem 中的标签?

ruby - 如何在引号之间找到特定文本

javascript - 创建一个 "pop-up"迷你页面

javascript - 什么是 Javascript 测试框架?