2011-06-28 9 views
0

HTMLファイルをサニタイズしようとしましたが、正しく動作しません。段落や改行タグを除いて、すべて完全にプレーンテキストにしたい。ここに私の浄化コードがあります(このドットは、問題に関係のない私のクラスの他のコードを意味します)。Rails 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 

正しく機能しません。機能がその入力を読み取っているHere is the original HTML file、およびhere is the "sanitized" code it is returning。それは、CSSタグ、JavaScript、およびHTMLコメントタグの本体に残っています。それは私が気づいていない他のものにも残っているかもしれません。段落や改行タグ以外のCSS、HTML、JavaScriptを完全に削除する方法についてアドバイスしてください。

+0

これは、サニタイズよりも構文解析に似ています。 –

+0

うわー、Scribd形式は対処するのには不便です。代わりに要点を提示できますか? –

答えて

0

私はあなたがそれを浄化したいとは思わない。消毒はHTMLを取り除き、あなたはOKとみなすHTML要素を除いてテキストを残します。これは、ユーザー入力フィールドにマークアップを含めるためのものです。

代わりに、おそらく解析する必要があります。たとえば、次の例は、指定されたhtml文字列の<p>タグのテキスト内容を出力します。

doc = Nokogiri::HTML.parse(html) 

doc.search('p').each do |el| 
    puts el.text 
end 
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;" 
関連する問題