diff -urN ../htmllint.orig/tagslist.cgi ./tagslist.cgi
--- ../htmllint.orig/tagslist.cgi Thu Sep 6 20:50:00 2012
+++ ./tagslist.cgi Sat Sep 8 01:00:00 2012
@@ -631,17 +631,36 @@
close TAGSLIST;
chmod 0764, $tagslist if $UNIX;
select STDOUT;
- &EchoHTML($tagslist);
+ &EchoHTML($tagslist, $outCODE);
}
}
sub EchoHTML
{
my $html = shift;
+ my $htmlCODE = shift;
if (open HTML, $html) {
$| = 1;
&PrintHTTPHeader;
- print $_ while ;
+ # HTMLヘッダ中に日本語文字がないことを前提にしている。
+ # もし万一、該当のmetaタグがないか、認識できないcharsetの場合は、
+ # $htmlCODE==undefでループを抜けるが、
+ # その場合Jconvertは入力から文字コードを推測して変換する。
+ while (!defined($htmlCODE) and my $s = ) {
+ if ($s =~ s#(]+)#$1$CHARSET#oi) {
+ $htmlCODE = {'EUC-JP'=>'euc', 'SHIFT_JIS'=>'sjis', 'ISO-2022-JP'=>'jis', 'UTF-8'=>'utf8'}->{uc($2)};
+ }
+ print $s;
+ last if $s =~ m##oi;
+ }
+ # 場合分けする必要はないかもしれないが、
+ # 通常の使用状況ではJconvertが不要なケースがほとんどであるし、
+ # 実測してもJconvertなしの方が速いので負荷軽減のため。
+ if ($htmlCODE ne $outCODE) {
+ print &Jconvert($_, $outCODE, $htmlCODE) while ;
+ } else {
+ print $_ while ;
+ }
close HTML;
return 1;
}