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'

请注意,这并不一定会加载所有 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

这没有很好的记录;我这个答案主要是基于关于这个问题的讨论

于 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 回答
5

这个问题很老了,但你可以这样称呼它test.rb

ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"
于 2016-04-13T09:33:00.393 回答
1

用这个例子:

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

这帮助了我:

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

输出:

example
于 2016-04-08T17:25:30.727 回答
-1
HTML::FullSanitizer.new.sanitize('<b>lol</b>') # => "lol"
于 2014-03-27T12:27:44.173 回答
-1

理想情况下,您将需要并包含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 gems。

于 2010-12-30T17:42:02.153 回答