有没有办法检查文本字符串是否是Rails中的有效HTML?

时间:2015-11-24 19:23:39

标签: html ruby-on-rails ruby validation html-validation

我在Rails 4中编写一个简单的CMS。我将我的文章存储在数据库中,作为包含HTML代码的文本字符串(不是必需的)。

无论如何,我需要一个方法来保存之前检查,如果文章的文本是有效的HTML或也没有(考虑到文章不是完整的HTML文档,但它的一部分,没有DOCTYPE和其他东西)。这样的事情:https://validator.w3.org/#validate_by_input+with_options(“验证HTML片段”),但在我的Rails应用程序中作为模型的验证方法,所以如果我的标记错误,它不应该保存文章并显示错误消息。

有没有宝石或其他方法来做到这一点?

2 个答案:

答案 0 :(得分:0)

如果您要检查rails中字段的输入,您可以简单地使用




    

  1. Rails before_save 回调
  2. 

  3. JS / Ajax用于检查输入(避免页面重新加载)
  4. 

  5. 您定义为有效HTML的约束
  6. 





在您的模型中可以创建一种方法来检查插入到字段中的文本是否有效。在保存表单之前,它会检查插入的html是否符合您对有效html的定义。





希望以上有所帮助。




答案 1 :(得分:0)

所以我想出了如何使用w3c_validators gem实现这一点。

  1. gem 'w3c_validators'添加到Gemfile并运行bundle install
  2. 更改模型。我添加了一个自定义验证方法来验证HTML,如下所示:

    class Article < ActiveRecord::Base
        validate :valid_html
    
        def valid_html
          @validator = MarkupValidator.new
    
          html = "<!DOCTYPE html><html><head><title>title</title></head><body>#{text}</body></html>"
    
          results = @validator.validate_text(html)
    
          if results.errors.length > 0
            results.errors.each do |err|
              errors.add(:text, err.to_s)
            end
          end
        end
      end
    
  3. (我需要将我的代码包装成HTML和BODY标签并添加更多标签,因为我没有在我的数据库中存储完整的HTML,只有部分内容。)