Убрать HTML из строки Ruby on Rails - PullRequest
109 голосов
/ 14 сентября 2011

Я работаю с Ruby on Rails. Есть ли способ вырезать html из строки с использованием метода sanitize или equal и сохранить только текст внутри атрибута value во входном теге?

Ответы [ 6 ]

169 голосов
/ 17 октября 2012

Если мы хотим использовать это в модели

ActionView::Base.full_sanitizer.sanitize(html_string)

, которая является кодом в методе "strip_tags"

132 голосов
/ 14 сентября 2011

В ActionView::Helpers::SanitizeHelper есть метод strip_tags:

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags

Редактировать: чтобы получить текст внутри атрибута значения, вы можете использовать что-то вроде Нокогири с выражением Xpath, чтобы вывести его из строки.

20 голосов
/ 15 марта 2013

Да, назовите это: sanitize(html_string, tags:[])

16 голосов
/ 02 июля 2015
ActionView::Base.full_sanitizer.sanitize(html_string)

Белый список тегов и атрибутов может быть указан как ниже

ActionView::Base.full_sanitizer.sanitize(html_string, :tags => %w(img br p), :attributes => %w(src style))

Выше оператор позволяет теги img , br и p и атрибуты src и style .

4 голосов
/ 02 октября 2017

Я использовал библиотеку Loofah, так как она подходит как для HTML, так и для XML (как для документов, так и для фрагментов строк). Это двигатель, стоящий за гемом дезинфицирующего средства html. Я просто вставляю пример кода, чтобы показать, как просто его использовать.

Камень люфы

unsafe_html = "ohai! <div>div is safe</div> <script>but script is not</script>"

doc = Loofah.fragment(unsafe_html).scrub!(:strip)
doc.to_s    # => "ohai! <div>div is safe</div> "
doc.text    # => "ohai! div is safe "
1 голос
/ 08 сентября 2015

Как насчет этого?

white_list_sanitizer = Rails::Html::WhiteListSanitizer.new
WHITELIST = ['p','b','h1','h2','h3','h4','h5','h6','li','ul','ol','small','i','u']


[Your, Models, Here].each do |klass| 
  klass.all.each do |ob| 
    klass.attribute_names.each do |attrs|
      if ob.send(attrs).is_a? String
        ob.send("#{attrs}=", white_list_sanitizer.sanitize(ob.send(attrs), tags: WHITELIST, attributes: %w(id style)).gsub(/<p>\s*<\/p>\r\n/im, ''))
        ob.save
      end
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...