Есть ли способ проверить, является ли текстовая строка допустимым HTML в Rails?
Я пишу простую CMS в Rails 4. И я храню свои статьи в базе данных в виде текстовых строк, содержащих HTML-код (не обязательно).
В любом случае, мне нужен метод, чтобы проверить перед сохранением, является ли текст статьи допустимым HTML или ни (учитывая, что статья не является полным документом HTML, а является его частью, без DOCTYPE и прочего). Примерно так: https://validator.w3.org/ ("Проверка фрагмента HTML"), но работа внутри моего приложения Rails как метод проверки модели, поэтому, если моя разметка неверна, ее не следует сохранять статью и показать сообщение об ошибке вместо.
Есть ли драгоценный камень или другой способ сделать это?
2 ответа
Поэтому я понял, как этого добиться, используя w3c_validators
драгоценный камень.
- добавлять
gem 'w3c_validators'
в Gemfile и запуститьbundle install
, Сменить модель. Я добавил пользовательский метод проверки для проверки 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
(Мне нужно обернуть мой код в теги HTML и BODY и добавить еще несколько тегов, потому что я не храню полный HTML в моей БД, только частичные).
Если вы хотите проверить ввод для поля в рельсах, вы можете просто использовать 3 вещи, которые
- Rails before_save обратный вызов
- JS/Ajax для проверки ввода (избегайте перезагрузки страницы)
- Ограничения, в которых вы определяете, чтобы быть действительным HTML
В вашей модели вы можете создать метод, в котором проверяется, является ли текст, вставленный в поле, действительным. Перед сохранением формы проверяется, соответствует ли вставленный HTML вашему определению действительного HTML.
Надеюсь, что выше помогает.