2012-03-29 8 views
6

sanitize()は、タグを閉じません。サニタイズHTMLと密接な不完全なタグ

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

上記のスニペットはそのまま文字列を残します。閉鎖を追加するにはどうすればよいですか?または少なくとも<a>を削除しますか?

答えて

2

更新答えは

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

それ自身の最後の行は私にとってうまくいっていて、閉じられていないタグも閉じていました。 –

5

これを行うには、適切なHTMLパーサを使用できます。私は仕事のためにノコギリをお勧めします:

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>" 

これは常に有効なXMLを返します。もちろん、使い易いヘルパーメソッドにパッケージ化することもできます。