Ruby on Rails dizesinden html çıkartın


121

Ruby on Rails ile çalışıyorum, htmlsanitize veya eşit yöntemini kullanarak bir dizeden ayırmanın ve girdi etiketinde yalnızca metin içindeki değer özniteliğini tutmanın bir yolu var mı ?


Sterilize değil veya eşit ama text.stripişe yarıyor
Keon

Yanıtlar:



183

Bunu modelde kullanmak istiyorsak

ActionView::Base.full_sanitizer.sanitize(html_string)

"strip_tags" yöntemindeki kod budur


31
Bu işe yarıyor, ancak mdoel'den ActionView'e başvurmak garip. Daha temiz bir şekilde require 'html/sanitizer'kendi dezenfektanınızı uygulayabilir ve uygulayabilirsiniz HTML::FullSanitizer.new.
Nik Haldimann

8
@nhaldimann, require 'html/sanitizer'hatayı artırıyor, bu yüzden kullanmam gerekiyor: Rails::Html::FullSanitizer.new( edgeapi.rubyonrails.org/classes/HTML/… )
Linh Dam


24
ActionView::Base.full_sanitizer.sanitize(html_string)

Beyaz etiket ve nitelik listesi aşağıdaki gibi belirtilebilir

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

Yukarıdaki ifade img , br ve p etiketlerine ve src ve style niteliklerine izin verir .


9

Hem HTML hem de XML (hem belgeler hem de dize parçaları) için uygun olduğu için Loofah kitaplığını kullandım. Html dezenfektan mücevherinin arkasındaki motordur. Kullanmanın ne kadar basit olduğunu göstermek için kod örneğini yapıştırıyorum.

Lif kabağı 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

Buna ne dersin?

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

Orada da Rails::Html::FullSanitizer.newbir beyaz liste belirtmek istemiyorsanız.
Fredrik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.