【问题标题】:Removing html tags from a form field after the user clicks submit (Rails)用户单击提交后从表单字段中删除 html 标签(Rails)
【发布时间】:2012-10-11 10:57:40
【问题描述】:

我以我的Post 模型的形式使用wysihtml5

posts/_form.html.erb:

<%= f.text_area :content, id: "wysihtml5-textarea",
                          placeHolder: "Content" %>

并将结果显示为raw + sanitize

show.html.erb:

<%= sanitize raw(@post.content), :tags => %w(b i u p br) %>

(我只允许b, i, u, p, and br 标签)。

这样做的问题是,除了上面提到的那些(b、i、u、p 和 br)之外的 html 标记仍然保存在文本区域中(如果用户单击编辑,它们仍然对用户可见) .我想在用户点击提交后立即删除(就像 WordPress 的文本编辑器那样)。

有什么建议吗?

编辑:

我正在尝试的东西:

post.rb:

  before_save :remove_html_tags

  def remove_html_tags
    self.content.sanitized_allowed_tags.delete 'div'
  end

【问题讨论】:

    标签: ruby-on-rails forms


    【解决方案1】:

    查看 API 文档:http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

    向下滚动一下,也许这就是你要找的东西:

    class Application < Rails::Application
      config.after_initialize do
        ActionView::Base.sanitized_allowed_tags.delete 'div'
      end
    end
    

    更新:如果您想在保存资源之前删除标签,您可以在模型级别使用before_save 回调执行此操作。或者在您的控制器中,在保存资源之前的 #create 操作中。如果你想去除某些标签,那么你可以使用#strip_tags,例如:

    before_save do |post|
      post.content = strip_tags(post.content)
    end
    

    但由于这是来自 ActiveSupport 的方法,因此您必须在模型中包含该模块:

    `ActionView::Helpers::SanitizeHelper`
    

    【讨论】:

    • 非常感谢!所以我不必指定表单的ID?它适用于网站上的所有表单?
    • 是的,它应该是全局的,每次你使用#sanitize
    • 但我在post 视图中使用sanitize。所以 Rails 足够聪明,可以在用户提交后将其应用到post 中? (抱歉,顺便问一下,我应该将该方法放在哪个文件中)?
    • 对不起,误解了你的问题。更新了我的答案。
    • 我的 EDIT 中的内容?请让我知道它是否正确或是否有更好的书写方式。
    猜你喜欢
    • 1970-01-01
    • 2019-04-21
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2011-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多