2010-12-04 11 views

Antwort

14

zu nennen ich glaube, das sollte genug sein:

"<b>lol</b>".gsub(/<[^>]*>/ui,'') #=> lol 

Sie können Nokogiri als auch verwenden:

require 'rubygems' 
require 'nokogiri' 
doc = Nokogiri::HTML("<b>lol</b>") 
doc.text #=> "lol" 

Sie können immer noch mit den Rails gehen, indem Sie etwas Ähnliches machen e:

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 
+1

Sie wissen nie, welche Browser tun, wenn Sie nur eine öffnende spitze Klammer setzen, ohne es jemals zu schließen; Ich würde definitiv nicht davon ausgehen, dass die 'gsub'-Lösung sicher ist, es sei denn, Sie fügen am Ende ein zusätzliches' .gsub (/ [<>] /, '') 'hinzu. (Und selbst dann werde ich nicht dafür bürgen.) –

+2

+1 für den Nokogiri-Kommentar. Das funktioniert perfekt für meine Bedürfnisse. –

+1

Nokogiri ist das richtige Werkzeug für den Job. – superluminary

-2

Im Idealfall würden Sie benötigen und sind ActionView::Helpers::SanitizeHelper aber es gibt mehrere Abhängigkeiten, die Sie nicht eingeschlossen werden, wenn das tun. Sie können sie selbst anfordern, um strip_tags verwenden zu können.

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" 

Dies ist vorausgesetzt, Sie haben Schienen 3 Edelsteine ​​installiert.

+0

ActionView unterstützt keine Rosinenpickerei - aus diesem Grund ist dieser Ansatz so eklatant. Siehe meine Antwort für weitere Details. – John

28

Die Frage ist ziemlich alt, aber ich hatte in letzter Zeit das gleiche Problem. Ich fand eine einfache Lösung: Edelstein sanitize. Es ist leicht, funktioniert gut und hat zusätzliche Optionen, wenn Sie sie brauchen.

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

ActiveSupport ist das einzige Rails-Framework, das die Auswahl einzelner Komponenten unterstützt. Die anderen Frameworks, einschließlich ActionView müssen en-masse erforderlich:

require 'action_view' 

Beachten Sie, dass dies nicht unbedingt benötigen alle ActionView laden. Abgesehen von Situationen, in denen Thread-Sicherheit erfordert, dass Autoloads eifrig ablaufen, werden lediglich Autoloads eingerichtet und gemeinsame Abhängigkeiten benötigt. Das bedeutet, dass nach der Anforderung, wenn Sie sich beziehen, z. ActionView::Helpers::SanitizeHelper wird action_view/helpers /sanitize_helper.rb erforderlich sein.

Deshalb ist die richtige unterstützte Weg zu erreichen, was Sie ActionView Verlangen, mit ist die folgende:

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 

Das ist nicht gut dokumentiert; Ich habe diese Antwort in erster Linie von basiert.

+0

Müssen Sie explizit action_view anfordern? In welcher Rails-Version? Ich erinnere mich nicht, mindestens für Rails 2.3.x benötigt zu haben – tokland

+1

Die Frage ist über die Verwendung von strip_tags _outside_ von Rails, also, ja, Sie müssen es einschließen. – John

+0

Oh, ich sehe, in der Tat sagt das OP nicht, dass er Rails benutzt. – tokland

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

Wenn Sie es nicht sehr häufig verwenden, können Sie verwenden:

ActionView::Base.full_sanitizer.sanitize(your_html_string) 

sonst kann man ein Verfahren in test_helper.rb Datei wie definieren:

def strip_html_tags(string) 
    ActionView::Base.full_sanitizer.sanitize(string) 
end 

Und dann in deinem Test.rb-Datei, verwenden Sie diese wie:

strip_html_tags(your_html_string) 
0

Mit diesem Beispiel:

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

Das half mir:

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

Ausgang:

example 
2

Die Frage ist ziemlich alt , aber Sie können es in Ihrem test.rb li nennen ke this:

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