0

HTMLファイルをサニタイズしようとしていますが、正しく機能していません。段落タグと改行タグを除いて、すべてプレーンテキストにしたい。これが私のサニタイズコードです(ドットは、問題に関係のない私のクラスの他のコードを示します):

.
.
.
include ActionView::Helpers::SanitizeHelper
.
.
.
def remove_html(html_content)
    sanitized_content_1 = sanitize(html_content, :tags => %w(p br))
    sanitized_content_2 = Nokogiri::HTML(sanitized_content_1)
    sanitized_content_2.css("style","script").remove
    return sanitized_content_2
end

正しく機能していません。 これは、関数が入力を読み取っている元のHTMLファイルであり、これは、関数が返す「サニタイズされた」コードです。CSSタグ、JavaScript、およびHTMLコメントタグの本文に残ります。私が気づかなかったのは他のものにも残っているかもしれません。段落と改行タグ以外のすべてのCSS、HTML、JavaScriptを完全に削除する方法についてアドバイスしてください。

4

2 に答える 2

0

CGI名前空間を使用してサニタイズすることもできます。

require 'CGI'
str = "<html><head><title>Hello</title></head><body></body></html>"
p str
p CGI::escapeHTML str

このスクリプトを実行すると、次の結果が得られます。

$ ruby sanitize.rb
"<html><head><title>Hello</title></head><body></body></html>"
"&lt;html&gt;&lt;head&gt;&lt;title&gt;Hello&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;"
于 2011-06-29T06:05:53.487 に答える
0

私はあなたがそれを消毒したいとは思わない。サニタイズはHTMLを削除し、OKと見なすHTML要素を除いてテキストを残します。これは、ユーザー入力フィールドにマークアップを含めることができるようにすることを目的としています。

代わりに、おそらくそれを解析したいと思うでしょう。たとえば、次の例では、<p>タグのテキストコンテンツを特定のhtml文字列で出力します。

doc = Nokogiri::HTML.parse(html)

doc.search('p').each do |el|
  puts el.text
end
于 2011-06-29T01:40:09.330 に答える