2010年4月アーカイブ

タイトルの問題ですが、自分はよく以下のような関数でやります。
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>(?:\&nbsp;)?</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>
こんな感じに補完してくれます。

もっと良い方法あるんですかね。
あったら教えて欲しいっす。
% ack --thpppt foo lib
_   /|
\'o.O'
=(___)=
   U    ack --thpppt!
--help みたら --thpppt ってのがあったのでなんだろうと思ったら、こんなのがでた。
それだけです。

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja