8

tidygem はメンテナンスされなくなり、複数のメモリ リークの問題が発生しています。

ノコギリの使用を提案する人もいました。

現在、次を使用してHTMLをクリーニングしています:

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

ただし、2つの問題があります。

  • のこぎりはDOCTYPE

  • htmlクリーンな HTML にandbodyタグを強制する簡単な方法はありますか?

4

2 に答える 2

8

完全なドキュメントを処理している場合は、次のことが必要です。

Nokogiri::HTML(html).to_html

htmlこれにより、タグ付けが強制され、次bodyのものが導入または保持されます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 を持つドキュメントを出力しますが、必要な<head><title>...</title></head>セクションはありません。

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>
于 2011-04-07T17:19:23.513 に答える
2

Tidy gem はサポートされていない可能性がありますが、基礎となるtidyアプリは維持されており、それが本当に必要なものです。柔軟性があり、オプションのかなりのリストがあります

HTML をさまざまな方法で渡すことができ、その構成を.tidyrcファイルで定義するか、コマンドラインで渡すことができます。Ruby%x{}を使用してファイルを渡すか、 を使用するIO.popenIO.pipe、パイプとして扱うことができます。

于 2011-04-07T18:06:04.057 に答える