HTML::TreeBuilderいいんだけど。。

escape関係が微妙なんだよなぁ。

use strict;
use warnings;

use HTML::TreeBuilder;

my $html = 'K&C and K&C';

my $tree = HTML::TreeBuilder->new;
$tree->parse($html);
$tree->eof;

print $tree->as_XML;

これで帰ってくるのは

<html><head></head><body>K&#38;C and K&#38;C</body></html>

これはひどい。

unsafeなものだけescapeしてsafeなものはしないので、escapeがソースとはずれてしまう。

& だけじゃなくて <>やマルチバイト系全部こうなる。

Plaggerでは HTML::Element::_xml_escape を上書きして対応してるけど、ちょろっと使う場合にいつもそれを書くはめんどいので、

$tree->parse( encode_entities($html, '&') );

とか、&を余分にエスケープしてからパースさせるようにして

decode_entities( $tree->as_XML );

とかして取り出している。

ものすごくBKです。なんとかならんかなぁ。

by typester / at 2006-10-08T01:49:00 / perl / Comments(0)