sanitize()
は、タグを閉じません。サニタイズHTMLと密接な不完全なタグ
s = "<a href='http://example.com'>incomplete"
sanitize(s, :tags => ['a', 'p'])
上記のスニペットはそのまま文字列を残します。閉鎖を追加するにはどうすればよいですか?または少なくとも<a>
を削除しますか?
sanitize()
は、タグを閉じません。サニタイズHTMLと密接な不完全なタグ
s = "<a href='http://example.com'>incomplete"
sanitize(s, :tags => ['a', 'p'])
上記のスニペットはそのまま文字列を残します。閉鎖を追加するにはどうすればよいですか?または少なくとも<a>
を削除しますか?
更新答えは
html = "<a href='http://example.com'>incomplete"
html = sanitize(s, tags: %w[a p])
Nokogiri::HTML::DocumentFragment.parse(html).to_html
これを行うには、適切な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を返します。もちろん、使い易いヘルパーメソッドにパッケージ化することもできます。
おかげで、私は 'TypeError例外を見ている:それはプレーンテキストで動作し、それに応じてInteger'にシンボルを変換することはできません。これはノコギリ1.5.2です。 – mahemoff
@mahemoff: 'Nokogiri :: HTML :: fragment(" 不完全な ")to_xml'はここでうまくいきます。あなたが試した実際のタグスープは何ですか? –
実際には、それはサニタイズの第2引数のようです。元の質問と同様に、許可されたタグはハッシュでなければなりません:tags =>。 'Nokogiri :: HTML :: fragment(sanitize( 'test 不完全な、:tags => [' a '、' p ']))to_xml'は動作します。 – mahemoff
それ自身の最後の行は私にとってうまくいっていて、閉じられていないタグも閉じていました。 –