Perlで壊れたHTMLを補完する
HTML::TreeBuilderのas_HTML()がうまいことやってくれます。
(実際にはHTML::Element::as_HTML()ですが)
sub _complement_html { my $broken_html = shift; my $html = do { no strict 'refs'; no warnings 'redefine'; local *HTML::Entities::encode_entities = sub {}; local *HTML::Entities::decode = sub {}; my $tree = HTML::TreeBuilder->new; $tree->parse( $broken_html ); $tree->as_HTML; }; $html =~ s#<html><head></head><body>##g; $html =~ s#</body></html>##g; $html =~ s#<div>(?:\ )?</div>##ig; return $html; }この関数を使って
<div align="right">foo<font color="#000000">black textのような閉じてないタグをもったHTMLを渡すと
<div align="right">foo<font color="#000000">black text</font></div>こんな感じに補完してくれます。
もっと良い方法あるんですかね。
あったら教えて欲しいっす。