以前にエントリ 'トラックバック不調の原因は PostgreSQL とゴミ文字' で記述した PostgreSQL を使っているときにトラックバックが正常に受信できない問題、ちょっと時間を見つけて直してみました。以下、その方法。
とりあえず EUC-JP パッチを当てた MovableType での対処方法です。(UTF-8 で同じ問題が起きるのかどうかよく分からないので)
lib/MT/App/TrackBack.pm の 182行目あたりから
if (length($excerpt) > 255) {
$excerpt = substr($excerpt, 0, 252) . '...';
}
という記述がありますが、その直後に以下のコードを挿入します。
if ($charset eq 'euc') {
my $remain = '...' if ($excerpt =~ s/\.\.\.$//);
if ($excerpt =~ /\x8F$/ or $excerpt =~ tr/\x8E\xA1-\xFE// % 2) {
chop $excerpt;
}
$excerpt .= $remain if (defined $remain);
}
Perl の substr() でマルチバイトの文字列を一定の長さで切り詰めた場合などに残るゴミ文字を削除しています。ここではPerlメモ '文字が途切れているか判定する'を参考に、EUC-JPで途切れた文字を削除してます。