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,留下文本,除了您认为可以的 HTML 元素。它旨在允许用户输入字段包含一些标记。

相反,您可能想要解析它。例如,以下将打印<p>给定 html 字符串中标签的文本内容。

doc = Nokogiri::HTML.parse(html)

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