Trackbackの文字コード指定法

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

以前、なんか周りがTrackbackの話題で盛り上がっていた頃、異なる文字コードのサイト間のTrackbackで文字化けしないために、自サイトの文字コードも一緒に送ろうなんて話をしていました。
そんな中ワタシもMovable Typeでの仕様を提案したものの、結局そのまんま実装していませんでした。
で、その後どうなったか知らず。どうなったの?
どうなったのかわからなかったので、ワタシの提案した方法を実装してデファクトスタンダードにしてみようと思い立ちました。
※既にデファクトスタンダードが存在していたら全速力で無かったことにするので誰か教えて!

以上のような理由から、日本語化パッチを更新しました

私から提案する仕様はこちら。

・GETの時はQueryString、POSTの時はContent Bodyにcharsetというパラメータで自サイトの文字コードを送信
・文字コードはJcode.pmのメソッド名で指定(EUC-JP -> euc、Shift_JIS -> sjis、UTF-8 -> utf8)

更新内容はこちら。

lib/MT.pm
560行目近辺

my $charset = {'Shift_JIS'=>'sjis','ISO-2022-JP'=>'jis','EUC-JP'=>'euc',
               'UTF-8'=>'utf8'}->{$mt->{cfg}->PublishCharset} || 'utf8';

my @qs;
push @qs, 'title=' . MT::Util::encode_url($entry->title);
push @qs, 'url=' . MT::Util::encode_url($entry->permalink);
push @qs, 'excerpt=' . MT::Util::encode_url($entry->get_excerpt);
push @qs, 'blog_name=' . MT::Util::encode_url($blog->name);
push @qs, 'charset=' . $charset;
my $qs = join '&', @qs;

lib/MT/App/Trackback.pm
120行目付近

my($title, $excerpt, $url, $blog_name, $icode) = map scalar $q->param($_),
                                  qw( title excerpt url blog_name charset);

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';
$icode = Jcode::getcode($excerpt . $title . $blog_name) unless $icode;
$title = Jcode->new($title, $icode)->$charset();
$excerpt = Jcode->new($excerpt, $icode)->$charset();
$blog_name = Jcode->new($blog_name, $icode)->$charset();