我需要将HTML转换为纯文本。在ActionView的SanitizeHelper中有一个很好的功能,但我无法理解如何引用它并在一个简单的test.rb文件中使用它。
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
我希望能够致电strip_tags("<b>lol</b>") => "lol"
答案 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)
通过这个例子:
"<p><i>example</i></p>"
这对我有所帮助:
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个宝石。