MT-Blacklistを使用した場合の文字化け対策

  • 投稿日:
  • by
  • カテゴリ:

greenplastic.netのyosshiさんに、MT-Blacklistプラグインを導入するとワタシの文字化け対策が無効化されてしまうと言う報告をいただきました。
早速調査したところ、MT-Blacklistプラグインは、lib/MT/App/Trackback.pmのメソッドを置き換えているようです。
ワタシがここでやっているのと同じ方法ですね。

ということで、MT-Blacklistを導入する場合は、以下のように書き換えれば大丈夫だと思います。動作未確認。不具合が起こったら教えてください。
初版:2003/11/06
追加:2004/03/03 Ver1.63に対応

    MTBlPing.pm
  1. 42行目以降を書き換え
    my($title, $excerpt, $url, $blog_name) = map scalar $q->param($_),
                                             qw( title excerpt url blog_name);

    MT::App::Trackback::no_utf8($tb_id, $title, $excerpt, $url, $blog_name);
      ↓
    my($title, $excerpt, $url, $blog_name, $icode) = map scalar $q->param($_),
                                             qw( title excerpt url blog_name charset);

    MT::App::Trackback::no_utf8($tb_id, $title, $excerpt, $url, $blog_name);
    require Jcode;
    my $charset = {'Shift_JIS'=>'sjis','ISO-2022-JP'=>'jis','EUC-JP'=>'euc',
                   'UTF-8'=>'utf8'}->{$app->{cfg}->PublishCharset} || 'utf8';
    my $incoming = {'shift_jis'=>'sjis','iso-2022-jp'=>'jis','euc-jp'=>'euc',
                    'utf-8'=>'utf8'}->{lc($icode)} || Jcode::getcode($excerpt . $title . $blog_name);
    $title = Jcode->new($title, $incoming)->$charset();
    $excerpt = Jcode->new($excerpt, $incoming)->$charset();
    $blog_name = Jcode->new($blog_name, $incoming)->$charset();

  2. 108行目以降を書き換え
    if (length($excerpt) > 255) {
        $excerpt = substr($excerpt, 0, 252) . '...';
    }
      ↓
    if (length($excerpt) > 255) {
        $excerpt = substr(Jcode->new($excerpt, $charset)->euc(), 0, 252);
        if ($excerpt =~ /\x8F$/ or $excerpt =~ tr/\x8E\xA1-\xFE// % 2) {
            chop $excerpt;
        }
        $excerpt = Jcode->new($excerpt . '...', 'euc')->$charset();

    }