Hapus html dari string Ruby on Rails

121

Saya bekerja dengan Ruby on Rails, Apakah ada cara untuk menghapus htmldari string menggunakan metode sanitasi atau equal dan hanya menyimpan teks di dalam atribut nilai pada tag input?

Mattias
sumber
Tidak membersihkan atau sama tetapi text.stripbekerja
Keon

Jawaban:

183

Jika kita ingin menggunakan model ini

ActionView::Base.full_sanitizer.sanitize(html_string)

yang merupakan kode dalam metode "strip_tags"

Jon
sumber
31
Ini berfungsi tetapi merujuk ke ActionView dari mdoel itu canggung. Lebih bersih Anda bisa require 'html/sanitizer'dan memberi contoh pembersih Anda sendiri HTML::FullSanitizer.new.
Nik Haldimann
8
@nhaldimann, require 'html/sanitizer'menimbulkan kesalahan jadi saya harus menggunakan: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam
24

Ya, sebut ini: sanitize(html_string, tags:[])

bcackerman.dll
sumber
24
ActionView::Base.full_sanitizer.sanitize(html_string)

Daftar putih tag dan atribut dapat ditentukan seperti di bawah ini

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

Pernyataan di atas memungkinkan tag img , br dan p dan atribut src dan gaya .

Satishakumar Awati
sumber
9

Saya telah menggunakan pustaka Loofah, karena cocok untuk HTML dan XML (baik dokumen maupun fragmen string). Ini adalah mesin di belakang permata pembersih html. Saya hanya menempelkan contoh kode untuk menunjukkan betapa sederhananya penggunaannya.

Permata Loofah

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 "
Krishna Vedula
sumber
1

Bagaimana dengan ini?

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
josetapadas
sumber
Ada juga Rails::Html::FullSanitizer.newjika Anda tidak ingin menentukan daftar putih.
Fredrik