【问题标题】:Cleaning HTML with Nokogiri (instead of Tidy)使用 Nokogiri(而不是 Tidy)清理 HTML
【发布时间】:2011-04-07 17:08:44
【问题描述】:

tidy gem 不再维护,存在多个内存泄漏问题。

有人建议使用 Nokogiri。

我目前正在使用以下方法清理 HTML:

Nokogiri::HTML::DocumentFragment.parse(html).to_html

我有两个问题:

  • Nokogiri 删除了DOCTYPE

  • 有没有一种简单的方法可以强制清理后的 HTML 具有 htmlbody 标签?

【问题讨论】:

    标签: ruby nokogiri tidy


    【解决方案1】:

    如果您正在处理完整的文档,您需要:

    Nokogiri::HTML(html).to_html
    

    这将强制使用htmlbody 标签,并引入或保留DOCTYPE

    puts Nokogiri::HTML('<p>Hi!</p>').to_html
    #=> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
    #=>  "http://www.w3.org/TR/REC-html40/loose.dtd">
    #=> <html><body><p>Hi!</p></body></html>
    
    puts Nokogiri::HTML('<!DOCTYPE html><p>Hi!</p>').to_html
    #=> <!DOCTYPE html>
    #=> <html><body><p>Hi!</p></body></html>
    

    请注意,不保证输出在语法上有效。例如,如果我提供一个损坏的文档并声称它是 HTML4.01 严格的,Nokogiri 将输出一个具有该 DOCTYPE 但没有必需的&lt;head&gt;&lt;title&gt;...&lt;/title&gt;&lt;/head&gt; 部分的文档:

    dtd = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">'
    puts Nokogiri::HTML("#{dtd}<p>Hi!</p>").to_html
    #=> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    #=>  "http://www.w3.org/TR/html4/strict.dtd">
    #=> <html><body><p>Hi!</p></body></html>
    

    【讨论】:

    • 哇。我应该看起来更努力一点。谢谢一堆。 :) 顺便说一句,你对 Nokogiri 与 Tidy 的表现有何不同?或者你有一个更好地清理 HTML 的 Ruby 库的建议?
    • @Christian 我没有使用 Tidy、Rubyful Soup、Hpricot 或任何其他用于整理 HTML 的库的经验。 Nokogiri 是我为所有 HTML 和 XML 选择的工具包,尽管我几乎总是在处理语法上有效的标记。
    【解决方案2】:

    可能不支持 Tidy gem,但底层的 tidy app is maintained,这才是你真正需要的。它很灵活,并且有相当多的list of options

    您可以通过多种不同的方式将 HTML 传递给它,并在 .tidyrc 文件中定义其配置或在命令行上传递它们。您可以使用 Ruby 的 %x{} 向其传递文件或使用 IO.popenIO.pipe 将其视为管道。

    【讨论】:

    • 是的,这是我想到的另一个选择,但我想避免每次都创建子流程。
    • 然后使用 IO.pipe 并保持打开状态。在整个应用会话中,您只需执行一次。
    • @Christian Joudrey 我刚刚发现有人正在为 Ruby 做一个新的整理工作:github.com/carld/tidy
    猜你喜欢
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多