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