The tidy
gem 不再维护,并且存在多个内存泄漏问题。
有些人建议使用Nokogiri。
我目前正在使用以下方法清理 HTML:
Nokogiri::HTML::DocumentFragment.parse(html).to_html
不过我有两个问题:
如果您正在处理完整的文档,您需要:
Nokogiri::HTML(html).to_html
这将迫使html
and 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>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)