TrackBack文字化け対策

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

このエントリは内容が古いです。
最新の日本語化パッチを使用するか、こちらのエントリを参考にしてください。
日本語化パッチを適用した人は、こちらの文字化け対策を行う必要はありません。

MovableTypeで日本語を使用するには、Shift_JISやEUC-JPもしくはUTF-8で動作させることが必要になるわけで、どの文字コードが一番よく使われているのかはわかりませんが、ここで配布されているJapanese Language Packを使用している人はたいていEUC-JPを使用していると思われますし、実際ワタシもEUC-JPを使ってます。
で、別に管理画面とかが英語でも構わないとか言う人はJapanese Language Packを使用しないわけで、そんな人はShift_JISを使用している可能性もあるわけです。

さて、MovableTypeにはTrackBackという機能がありまして、ワタシはこの機能をどんな時に使うものかわかっていなかったりしていますが、とにかくそんな機能があります。
先にも述べたとおり、日本のMovableType界には3種類の文字コードで動作しているMovableTypeがそれぞれ存在しているわけで、Shift_JISのサイトからEUC-JPのサイトにTrackBackしたり、EUC-JPのサイトからUTF-8のサイトにTrackBackしたりすると文字化けが発生してしまうわけです。
その文字化けを強引に解消する方法を考えました。

ワタシがEUC-JPなので、EUC-JPでの対処法を書きます。(Version2.51向け)


  1. mt.cgiが存在する場所から見て、
    ./lib/MT/App/TrackBack.pmを開きます。
  2. 最新の2.51だと53行目からの「no_utf8」というサブルーチンを以下のように書き換えます。

    Jcode.pmがインストールされている場合
    sub no_utf8 {
        require Jcode;
        for (@_) {
            next if !defined $_;
            $_ = pack 'C0A*', $_;
            $_ = Jcode->new($_)->euc;
        }
    }

    Jcode.pmがインストールされていない場合(UTF-8からのTrackBackには対応できません)
    sub no_utf8 {
        require 'jcode.pl';
        for (@_) {
            next if !defined $_;
            $_ = pack 'C0A*', $_;
            $_ = jcode::euc($_);
        }
    }

  3. Jcode.pmがインストールされていない場合、mt.cgiのあるディレクトリに、jcode.plをアップロードしておきます。

これで、EUC-JP以外の文字コードでTrackBackのデータが送られてきても、EUC-JPに変換してくれるはずです。
なんでもいいので、自分のサイトのTrackBack受け入れのURL(たとえばウチならhttp://rebecca.ac/cgi-bin/mt/mt-tb.cgi/3 とか)にブラウザで直接アクセスしてみましょう。
そこで、
Need a Source URL (url).
とか出てきたらたぶんうまくいきます。
An error occurred:
とか出てきたら何かが間違っています。

なお、jcode.plはUTF-8には対応していないので、なるべくならJcode.pmを使用することをオススメします。
ついでなので、Jcode.pmのインストール方法も書いておきます。


  1. http://search.cpan.org/CPAN/authors/id/D/DA/DANKOGAI/Jcode-0.82.tar.gzから現在の最新版0.82をダウンロード
  2. 解凍
  3. 出来たファイルのうち、Jcode.pmというファイルとJcodeというディレクトリを
    ./lib/ か ./extlib/ どちらかにアップロード
  4. 以上でインストール完了

Shift_JISやUTF-8の人もこれを参考にすれば治せるでしょう。
俺はShift_JISなんだけど参考にしてもわからねーよ、と言う方がいたらコメントくださいませ。
ただ、ワタシはインチキプログラマなので、もっと良い解決策を提示できる人がいたら、よろこんでそちらに乗り換えます。
一番いいのは、MovableType自体に文字コード対策が施されることでしょう。

※十分検証したわけではないので、不具合が出るかもしれません。ということで、検証したいので、文字コード問わずだれかこの記事にTrackBackしてください。
※上記の改造を行ったが故に問題が発生しても責任は負いかねます。申し訳ありませんが、改造は自己責任でお願いします。