html - ¿Cómo puedo usar strip_tags en el código Ruby normal(sin rieles)?
actionview (8)
ActiveSupport es el único marco de Rails que admite componentes individuales. Los otros marcos, incluido ActionView, deben ser requeridos en masa:
require ''action_view''
Tenga en cuenta que este requisito no necesariamente cargará todo ActionView. Salvo situaciones en las que la seguridad de subprocesos requiere que las autocargas se realicen con entusiasmo, simplemente configura las autocargas y requiere dependencias comunes. Eso significa que siguiendo el requerimiento, si hace referencia, por ejemplo, ActionView::Helpers::SanitizeHelper
, causará que action_view/helpers /sanitize_helper.rb
sea requerido.
Por lo tanto, la forma correcta y compatible de lograr lo que desea con ActionView es la siguiente:
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
Esto no está bien documentado; Basé esta respuesta principalmente en la discusión sobre este tema .
Necesito convertir HTML en texto plano. Hay una buena función que hace eso en SanitizeHelper de ActionView, pero tengo problemas para entender cómo puedo hacer referencia a él y usarlo en un simple archivo test.rb.
http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html
Me gustaría poder llamar a strip_tags("<b>lol</b>") => "lol"
Con este ejemplo:
"<p><i>example</i></p>"
Esto me ayudó
ActionView::Base.full_sanitizer.sanitize(Nokogiri::HTML(example).text)
Salida:
example
Creo que esto debería ser suficiente:
"<b>lol</b>".gsub(/<[^>]*>/ui,'''') #=> lol
Puedes usar Nokogiri también:
require ''rubygems''
require ''nokogiri''
doc = Nokogiri::HTML("<b>lol</b>")
doc.text #=> "lol"
Todavía puedes ir con Rails one haciendo algo como:
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
La pregunta es bastante antigua, pero puedes llamarlo en tu test.rb
así:
ActionController::Base.helpers.strip_tags("<b>lol</b>") => "lol"
La pregunta es bastante antigua, pero tuve el mismo problema recientemente. Encontré una solución simple: sanitize gemas. Es ligero, funciona bien y tiene opciones adicionales si las necesita.
Sanitize.clean("<b>lol</b>") #=> "lol"
Lo ideal sería requerir e incluir ActionView::Helpers::SanitizeHelper
pero hay varias dependencias que no se incluyen cuando haces eso. Puede solicitarlos usted mismo para poder usar 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"
Esto es asumiendo que tienes rieles 3 gemas instaladas.
Si no lo usas muy a menudo, entonces puedes usar:
ActionView::Base.full_sanitizer.sanitize(your_html_string)
de lo contrario, puede definir un método en el archivo test_helper.rb como:
def strip_html_tags(string)
ActionView::Base.full_sanitizer.sanitize(string)
end
Y luego en tu archivo test.rb, usa esto como:
strip_html_tags(your_html_string)
HTML::FullSanitizer.new.sanitize(''<b>lol</b>'') # => "lol"