"Parsing of undecoded UTF-8 will give garbage .." in Text::Hatena::HTMLFilter
以前にも書いたけど、
stderr: Parsing of undecoded UTF-8 will give garbage when decoding entities at /usr/lib/perl5/site_perl/5.8.6/Text/Hatena/HTMLFilter.pm line 36.
はHTML::Parserのwarningsで、消すにはHTML::Parserに渡す前にutf8 flagをたてるしかなさそう。
そこで、Text::Hatena ver. 0.12のText::Hatena::HTMLFilterをいじくってみた。
基本は、Parserに渡す前にutf8 flagを立てる。
また、Text::Hatenaのtexthandler(autolink処理)に渡す前にはflagをoff、出力する時は、基本off
というところで、parse、texthandler、htmlの各メソッドを以下のようにしてみた。
sub parse { my $self = shift; my $html = shift or return; if ( Encode::is_utf8($html) ) { $self->{original_is_utf8} = 1; } else { Encode::_utf8_on($html); } $self->{parser}->parse($html); } sub texthandler { my $self = shift; return sub { my $text = shift; Encode::_utf8_off($text) if Encode::is_utf8($text); $text = &{ $self->{context}->texthandler }( $text, $self->{context}, $self ); Encode::_utf8_on($text) unless Encode::is_utf8($text); $self->{html} .= $text; } } sub html { my $self = shift; my $html = $self->{html}; Encode::_utf8_off($html) if Encode::is_utf8($html) && !$self->{original_is_utf8}; $html; }
Text::Hatenaは基本flagはoffの想定できているんだけど、utf8前提っぽいところもあるから、flagはonにしていた方が楽じゃないかなぁ。。