25

HTML をプレーンテキストに変換する必要があります。ActionView の SanitizeHelper にはそれを行う優れた関数がありますが、それを参照して単純な test.rb ファイルで使用する方法を理解するのに苦労しています。

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

通話できるようにしたいstrip_tags("<b>lol</b>") => "lol"

4

8 に答える 8

33

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

Sanitize.clean("<b>lol</b>") #=> "lol"
于 2011-04-21T15:20:40.290 に答える
25

ActiveSupport は、厳選された個々のコンポーネントをサポートする唯一の Rails フレームワークです。ActionView を含む他のフレームワークは、まとめて必要です。

require 'action_view'

このrequireは必ずしもActionViewのすべてをロードするわけではないことに注意してください。スレッド セーフが自動ロードの積極的な発生を必要とする状況を除いて、自動ロードをセットアップし、共通の依存関係を必要とするだけです。つまり、require に続いて、例えば を参照すると、requireActionView::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

これは十分に文書化されていません。この回答は、主にこの問題に関する議論に基づいています。

于 2011-12-29T01:48:55.600 に答える
17

これで十分だと思います:

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

Nokogiri も使用できます。

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

次のようなことを行うことで、Rails を使用できます。

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
于 2010-12-04T16:03:17.983 に答える
14

あまり頻繁に使用しない場合は、次を使用できます。

ActionView::Base.full_sanitizer.sanitize(your_html_string)

それ以外の場合は、次のように test_helper.rb ファイルでメソッドを定義できます。

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

次に、test.rb ファイルで、次のように使用します。

strip_html_tags(your_html_string)
于 2014-04-23T08:10:02.747 に答える
-1

理想的には、require して含める必要があります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"

これは、Rails 3 gem がインストールされていることを前提としています。

于 2010-12-30T17:42:02.153 に答える
-1
HTML::FullSanitizer.new.sanitize('<b>lol</b>') # => "lol"
于 2014-03-27T12:27:44.173 に答える