使用Nokogiri清洁HTML(而不是整洁)
tidy
gem不再维护,并且有多个内存泄漏问题。
有人建议使用Nokogiri。
我目前正在使用以下方法清理HTML:
Nokogiri::HTML::DocumentFragment.parse(html).to_html
我有两个问题:
-
Nokogiri删除了
DOCTYPE
-
是否有一种简单的方法可以强制清理HTML以获得
html
和body
标签?
如果您正在处理完整文档,则需要:
Nokogiri::HTML(html).to_html
这将强制html
和body
标签,并引入或保留DOCTYPE
:
puts Nokogiri::HTML('Hi!
').to_html #=> "http://www.w3.org/TR/REC-html40/loose.dtd"> #=> Hi!
puts Nokogiri::HTML('Hi!
').to_html #=> #=> Hi!
请注意,输出不保证在语法上有效。 例如,如果我提供一个破损的文档,并声称它是HTML4.01严格,Nokogiri将输出一个文档与该DOCTYPE但没有必要的
部分:
dtd = '' puts Nokogiri::HTML("#{dtd}Hi!
").to_html #=> "http://www.w3.org/TR/html4/strict.dtd"> #=> Hi!
可能不支持Tidy gem,但维护了底层tidy
应用程序 ,这就是您真正需要的。 它很灵活,有很多选项 。
您可以通过多种不同方式将HTML传递给它,并在.tidyrc
文件中定义其配置或在命令行上传递它们。 您可以使用Ruby的%x{}
将文件传递给它或使用IO.popen
或IO.pipe
将其视为管道。