ruby 有没有一种方法可以检查文本字符串是否是Rails中的有效HTML?

093gszye  于 2023-08-04  发布在  Ruby
关注(0)|答案(2)|浏览(131)

我正在用Rails 4编写一个简单的CMS。我在数据库中存储我的文章作为包含HTML代码的文本字符串(不必要)。
无论如何,我需要一个方法来检查保存前,如果文章的文本是有效的HTML或也没有(考虑到这篇文章不是完整的HTML文档,但它的一部分,没有DOCTYPE和其他东西)。大概是这样的:https://validator.w3.org/#validate_by_input+with_options(“Validate HTML fragment”),但是在我的Rails应用程序中作为模型的验证方法工作,所以如果我的标记是错误的,它不应该保存文章,而是显示错误消息。
我如何才能做到这一点?

fv2wmkja

fv2wmkja1#

所以我想出了如何使用w3c_validators gem来实现这一点。
1.将gem 'w3c_validators'添加到Gemfile并运行bundle install
1.更改模型。我添加了一个自定义验证方法来验证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

字符串
(我需要将代码 Package 到HTML和BODY标签中,并添加更多的标签,因为我没有在DB中存储完整的HTML,只有部分)。

fzwojiic

fzwojiic2#

如果你想在rails中检查一个字段的输入,你可以简单地使用三个方法

  1. Rails before_save回调
    1.检查输入的JS/ AJAX (避免页面重新加载)
    1.定义为有效HTML的约束
    在您的模型中,您可以创建一个方法来检查插入到字段中的文本是否有效。在保存表单之前,它会检查插入的HTML是否符合有效HTML的定义。

相关问题