2012-03-29 7 views
6

sanitize() in ApplicationHelper schließt Tags nicht.HTML bereinigen und unvollständige Tags schließen

s = "<a href='http://example.com'>incomplete" 
sanitize(s, :tags => ['a', 'p']) 

Das obige Snippet lässt die Zeichenfolge unverändert. Wie könnte ich es erzwingen, eine schließende </a> anhängen oder zumindest die <a> zusammen strippen?

Antwort

2

Die aktualisierte Antwort ist

html = "<a href='http://example.com'>incomplete" 
html = sanitize(s, tags: %w[a p]) 
Nokogiri::HTML::DocumentFragment.parse(html).to_html 
+0

Die letzte Zeile funktionierte für mich großartig und schloss auch die nicht geschlossenen Tags. –

5

Sie können dafür einen geeigneten HTML-Parser verwenden. Ich würde Nokogiri für den Job empfehlen:

require 'nokogiri' 
# ... 
s = "<a href='http://example.com'>incomplete" 
Nokogiri::HTML::fragment(sanitize(s, :tags => ['a', 'p'])).to_xml 
# => "<a href=\"http://example.com\">incomplete</a>" 

Dies wird immer gültiges XML zurückgeben. Natürlich können Sie das in Ihre eigene Hilfsmethode zur einfacheren Verwendung verpacken.