/ / 最新

swk's log - tb-standalone 表示の長さ制限

2005-11-27

* tb-standalone 表示の長さ制限 [logging]

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


Shingo W. Kagami - swk(at)kagami.org