Ответ 1
Вопрос довольно старый, но в последнее время у меня была такая же проблема. Я нашел простое решение: gem sanitize. Он светится, прекрасно работает и имеет дополнительные опции, если они вам нужны.
Sanitize.clean("<b>lol</b>") #=> "lol"
Мне нужно превратить HTML в простой текст. Там хорошая функция, которая делает это в ActionView SanitizeHelper, но мне трудно понять, как я могу ссылаться на нее и использовать ее в простом файле test.rb.
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
Мне бы хотелось позвонить strip_tags("<b>lol</b>") => "lol"
Вопрос довольно старый, но в последнее время у меня была такая же проблема. Я нашел простое решение: gem sanitize. Он светится, прекрасно работает и имеет дополнительные опции, если они вам нужны.
Sanitize.clean("<b>lol</b>") #=> "lol"
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
Это плохо документировано; Я основывал этот ответ в основном на обсуждении этой проблемы.
Я считаю, что этого должно быть достаточно:
"<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
Если вы не используете его очень часто, вы можете использовать:
ActionView::Base.full_sanitizer.sanitize(your_html_string)
else вы можете определить метод в файле test_helper.rb, например:
def strip_html_tags(string)
ActionView::Base.full_sanitizer.sanitize(string)
end
И затем в вашем файле test.rb используйте следующее:
strip_html_tags(your_html_string)
Вопрос довольно старый, но вы можете называть его в test.rb
следующим образом:
ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"
В этом примере:
"<p><i>example</i></p>"
Это помогло мне:
ActionView::Base.full_sanitizer.sanitize(Nokogiri::HTML(example).text)
Вывод:
example
HTML::FullSanitizer.new.sanitize('<b>lol</b>') # => "lol"
В идеале вам потребуется и включить 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 камни.