Стріпте html з рядка Ruby on Rails


121

Я працюю з Ruby на Rails. Чи є спосіб позбавити htmlрядок за допомогою методу sanitize або рівних і зберегти лише текст усередині атрибута value у вхідному тегу?


Не санітуйте і не дорівнюйте, але text.stripпрацює
Кіон,

Відповіді:



183

Якщо ми хочемо використовувати це в моделі

ActionView::Base.full_sanitizer.sanitize(html_string)

що є кодом у методі "strip_tags"


31
Це працює, але посилання на ActionView з mdoel незручно. Більш чітко ви можете require 'html/sanitizer'та інстанціювати власний дезінфікуючий засіб HTML::FullSanitizer.new.
Нік Халдіманн

8
@nhaldimann, require 'html/sanitizer'викликає помилку, тому мені доводиться користуватися: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Лін Дам


24
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 та стилю .


9

Я використовував бібліотеку Loofah, оскільки вона підходить як для HTML, так і для XML (як документів, так і фрагментів рядків). Це двигун, що стоїть за коштом html sanitizer gem. Я просто вставляю приклад коду, щоб показати, як просто це використовувати.

Loofah Gem

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

Як щодо цього?

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

Є також, Rails::Html::FullSanitizer.newякщо ви не хочете вказувати білий список.
Фредрік
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.