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?


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"


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
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 .


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 "

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

Ada juga Rails::Html::FullSanitizer.newjika Anda tidak ingin menentukan daftar putih.
Fredrik
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.