やろうやろうと思ってて放置していた.本当は受付時に処理するのが正しいと思うのだけど,とりあえず表示時で対応する.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