2010-12-04 3 views
22

HTMLをプレーンテキストに変換する必要があります。 ActionViewのSanitizeHelperには素晴らしい機能がありますが、私はそれをどのように参照して、簡単なtest.rbファイルで使用できるか理解できません。通常のRubyコード(非レール)でstrip_tagsを使用するにはどうすればよいですか?

http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html

私は、これは十分なはずと信じてstrip_tags("<b>lol</b>") => "lol"

答えて

14

を呼び出すことができるようにしたいと思います:

"<b>lol</b>".gsub(/<[^>]*>/ui,'') #=> lol 

あなたにも鋸山を使用することができます。

require 'rubygems' 
require 'nokogiri' 
doc = Nokogiri::HTML("<b>lol</b>") 
doc.text #=> "lol" 

をあなたはまだ何かをして、Railsのものと一緒に行くことができますE:

require 'rubygems' 
require 'action_view' 

class Foo 
    include ActionView::Helpers::SanitizeHelper 

    def test 
    strip_tags("<b>lol</b>") 
    end 
end 

f = Foo.new 
puts f.test #=> lol 
+1

オープニングポインティングブラケットを閉めずに置くだけでどのブラウザが動作するのかわからないことがあります。最後に余分な '.gsub(/ [<>] /、 '')を置かない限り、' gsub'の解決策は安全だとは思わないでしょう。 (そして、それでも私はそれを保証しません)。 –

+2

ノコギリコメントの+1。それは私のニーズに完璧に作用します。 –

+1

ノコギリは仕事に適したツールです。 – superluminary

-2

理想的には、あなたが必要とActionView::Helpers::SanitizeHelperを含むが、あなたがそれを行う際に含まれませんいくつかの依存関係があるでしょう。 strip_tagsを使用するには、自分でそれらを要求することができます。

require 'erb' 
require 'active_support' 
require 'active_support/core_ext/class/attribute_accessors' 
require 'active_support/core_ext/string/encoding' 
require 'action_view/helpers/capture_helper' 
require 'action_view/helpers/sanitize_helper' 

include ActionView::Helpers::SanitizeHelper 

strip_tags("<b>lol</b>") # => "lol" 

これは、レール3つの宝石がインストールされていることを前提としています。

+0

ActionViewはチェリーピッキングの必要性をサポートしていません。詳細は私の答えを見てください。 – John

28

質問はかなり古いですが、私は最近同じ問題がありました。私は簡単な解決策を見つけました:gem sanitize。軽くて、うまく動作し、必要に応じて追加オプションがあります。

Sanitize.clean("<b>lol</b>") #=> "lol" 
24

ActiveSupportは、個々のコンポーネントをチェリーピッキングすることをサポートする唯一のRailsフレームワークです。 ActionViewを含む他のフレームワークは、必要とされなければならエン一斉:これは必ずしもActionViewのすべてをロードしない必要があること

require 'action_view' 

注意。スレッドセーフは、自動ロードが熱心に行われることを要求する状況を除いて、オートロードを設定し、共通の依存関係を必要とするだけです。これは、あなたが参照する場合、例えば、次のような要求を満たすことを意味します。 ActionView::Helpers::SanitizeHelperを入力すると、action_view/helpers /sanitize_helper.rbが必要になります。したがって

あなたはActionViewを使用して望むものを達成するための正しい、サポートされている方法

は以下の通りである。これは、十分に文書化されていない

require 'action_view' 

class Test < Test::Unit::TestCase # or whatever 
    include ActionView::Helpers::SanitizeHelper 

    def my_test 
    assert_equal "lol", strip_tags("<b>lol</b>") 
    end 
end 

。私はこの答えを主にthe discussion on this issueから外した。

+0

明示的にaction_viewが必要ですか? Railsのバージョンは?私は少なくともRails 2.3.xのために必要だったことを思い出しません – tokland

+1

質問は、Railsのstrip_tags _outside_を使用することです。そう、はい、それを含める必要があります。 – John

+0

ああ、私は確かに、OPは彼がRailsを使っているとは言いません。 – tokland

-1
HTML::FullSanitizer.new.sanitize('<b>lol</b>') # => "lol" 
8

あなたは、あなたが使用することができ、非常に多くの場合、それを使用しない場合:

ActionView::Base.full_sanitizer.sanitize(your_html_string) 

あなたのようtest_helper.rbファイルにメソッドを定義することができます。

def strip_html_tags(string) 
    ActionView::Base.full_sanitizer.sanitize(string) 
end 

そして、あなたのテストで。RBファイル、このようなを使用します。

strip_html_tags(your_html_string) 
0

この例では:

"&lt;p&gt;<i>example</i>&lt;/p&gt;" 

これは、私を助け:

ActionView::Base.full_sanitizer.sanitize(Nokogiri::HTML(example).text) 

出力:

example 
2

質問はかなり古いですしかし、あなたはtest.rb liでそれを呼び出すことができます

関連する問題