【问题标题】:Setting up rich text support for Rails on MySQL and Heroku在 MySQL 和 Heroku 上为 Rails 设置富文本支持
【发布时间】:2011-03-15 10:54:43
【问题描述】:

如何在 Rails 中存储包含粗体、项目符号和不同大小的格式化文本主体?

首先,text 字段类型是否有能力持有这个?

如果是这样,我需要做的只是使用富文本编辑器进行编辑,然后使用<pre> 显示是真的吗?

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-3 heroku richtext


    【解决方案1】:

    是的,text 类型旨在存储字符串。

    通常的方法是使用生成 HTML 的 Javascript 富文本编辑器。您将原始 HTML 直接保存到数据库中,然后在显示时对其进行清理。这是为了防止人们在其他访问者查看他们的输入时执行的文本区域中输入 Javascript 和其他讨厌的东西。

    Rails 3 默认清理你的输出,所以 all HTML 将被转义。您需要调用<%= @model.rich_text.html_safe %> 来跳过此清理过程,或者(更好!)调用<%= sanitize(@model.rich_text, :tags => %w(b i p)) %>,传入一个明确的允许标签列表。

    我没有使用 Heroku 的经验,但我无法想象会有什么不同。

    【讨论】:

    • 除了 javascript,您还可以考虑使用像 wmd-editor 这样的降价编辑器和像 bluecloth 或 RDiscount 这样的 gem
    • 当然——在某些情况下这是绝对可取的,因为它避免了许多直接输出 HTML 的问题,并且让您的用户可以更好地控制其格式。不过,这对您的用户来说更具技术性。 Stackoverflow 使用 WMD 衍生工具,让您了解 markdown 格式化语法。
    • 这是要列入白名单的 HTML 元素的安全列表吗? h1 h2 h3 h4 b i p pre div ul ol li strong strike em a span img br
    • 我认为img 可能有问题,但这取决于您的观众(有些聪明人会到处放令人震惊的图像吗?)。其他的都很好。请注意,sanitize 也会删除所有属性,因此如果您想拥有img 标签,您需要允许src 属性。这是另一个潜在的风险,但 sanitize 方法有一个相当广泛和创造性的测试套件来捕捉讨厌的东西。
    猜你喜欢
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多