文字列Ruby on RailsからHTMLを取り除く


121

Ruby on Rails htmlを使用しています。サニタイズまたはイコールメソッドを使用して文字列から削除し、入力タグの値属性内にテキストのみを保持する方法はありますか?


サニタイズまたは同等ではなくtext.strip機能します
Keon

回答:



183

これをモデルで使用したい場合

ActionView::Base.full_sanitizer.sanitize(html_string)

「strip_tags」メソッドのコードです


31
これは機能しますが、mdoelからActionViewを参照するのは厄介です。よりクリーンにrequire 'html/sanitizer'、独自の消毒剤をでインスタンス化できますHTML::FullSanitizer.new
Nik Haldimann、2013年

8
@nhaldimann、require 'html/sanitizer'エラーが発生するため、使用する必要があります:Rails::Html::FullSanitizer.newedgeapi.rubyonrails.org/classes/HTML/…
Linh Dam


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

タグと属性のホワイトリストは次のように指定できます

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

上記のステートメントでは、タグimgbr、およびpと、属性srcおよびstyleを使用できます。


9

私はLoofahライブラリを使用しました。これは、HTMLとXML(ドキュメントと文字列フラグメントの両方)の両方に適しているためです。これは、htmlサニタイザー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ホワイトリストを指定したくない場合もあります。
Fredrik
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.