やろうやろうと思ってて放置していた.本当は受付時に処理するのが正しいと思うのだけど,とりあえず表示時で対応する.tb.cgi の sub enc の定義を除去して,代わりに以下を挿入.
my $enc_maxlen = 512; sub round_utf8 { # http://www.akatsukinishisu.net/itazuragaki/id/round_utf-8.html my $str = shift; return $str if ($str =~ /[\x00-\x7F]$/); $str =~ s/[\xC0-\xFD]$//; $str =~ s/[\xE0-\xFD][\x80-\xBF]$//; $str =~ s/[\xF0-\xFD][\x80-\xBF]{2}$//; # $str =~ s/[\xF8-\xFD][\x80-\xBF]{3}$//; # $str =~ s/[\xFC-\xFD][\x80-\xBF]{4}$//; $str; } sub enc { use Jcode; my $str_orig = $_[0] ? Jcode->new($_[0])->utf8 : $_[0]; my $str = &round_utf8(substr($str_orig, 0, $enc_maxlen)); if ($str ne $str_orig) { $str .= " ..."; } return $str; }
utf8 の末尾切り落とし処理はぐぐって見つけたものを頂きました.自分では理解してませんのでそのままこぴぺしてます.
最終更新時間: 2009-01-04 15:31