如何在常规Ruby代码(非rails)中使用strip_tags?

时间:2010-12-04 14:48:37

标签: html ruby tags strip actionview

我需要将HTML转换为纯文本。在ActionView的SanitizeHelper中有一个很好的功能,但我无法理解如何引用它并在一个简单的test.rb文件中使用它。

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

我希望能够致电strip_tags("<b>lol</b>") => "lol"

8 个答案:

答案 0 :(得分:31)

这个问题很老了,但最近我遇到了同样的问题。我找到了一个简单的解决方案:gem sanitize。它很轻,工作正常,如果你需要它还有其他选择。

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

答案 1 :(得分:25)

ActiveSupport是唯一支持挑选单个组件的Rails框架。其他框架(包括ActionView)必须是必需的:

require 'action_view'

请注意,此要求不一定会加载所有ActionView。除非线程安全要求自动加载发生急切,否则它只会设置自动加载并需要常见的依赖关系。这意味着遵循要求,如果您参考,例如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

答案 2 :(得分:14)

我相信这应该足够了:

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

答案 3 :(得分:10)

如果您不经常使用它,那么您可以使用:

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)

答案 4 :(得分:3)

这个问题已经过时了,但您可以在test.rb这样称呼它:

ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"

答案 5 :(得分:0)

通过这个例子:

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

这对我有所帮助:

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

输出:

example

答案 6 :(得分:-1)

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

答案 7 :(得分:-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个宝石。