Ruby gem能够快速验证部分HTML片段吗?

时间:2014-06-24 20:48:55

标签: html ruby-on-rails ruby

我在Rails中制作了一个自定义的准CMS,我们希望在代码中有一个可编辑为HTML片段的字段(管理界面将在前端使用CodeMirror)。当它呈现给最终用户时,它将只是html_safe'并插入到div中。我们相信我们的内容编辑器不会是恶意的,但确保他们创建有效的HTML以便它们不会破坏页面会很有帮助,特别是因为它们对编码来说相对较新!

作为第一次尝试,我正在使用Hash.from_xml并将异常作为自定义验证程序进行抢救。但是有没有更好的和/或更优化的方式(即一个宝石)来检查它是否是有效的HTML?

谢谢!

4 个答案:

答案 0 :(得分:11)

您可以使用Nokogiri库(和gem)在模型中创建验证器。在片段上使用Nokogiri并不完美(因此您可能希望添加覆盖验证器的能力)但它会捕获许多可能会破坏页面的明显错误。

示例(假设您的模型属性/字段被称为content):

validate :invalid_html?

def invalid_html?
  doc = Nokogiri::HTML(self.content) do |config|
    config.strict
  end
  if doc.errors.any?
    errors.add(:base, "Custom Error Message")
  end
end

答案 1 :(得分:7)

而不是验证,或许值得使用能够修正标记的Nokogiri:

require 'nokogiri'
html = '<div><b>Whoa</i>'
Nokogiri::HTML::DocumentFragment.parse(html).to_html
#=> "<div><b>Whoa</b></div>"

答案 2 :(得分:2)

答案 3 :(得分:1)

我认为这可能是您正在寻找的东西?:be_valid_asset