以前、なんか周りが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();
miyagawa
> ・文字コードはJcode.pmのメソッド名で指定(EUC-JP -> euc、Shift_JIS -> sjis、UTF-8 -> utf8)
文字コードは IANA charset 名 (euc-jp など) の方がよろしいのではないすか?
milano
やっぱり?
明日直します。
euc-jp、Shift_JIS、utf-8
であってます?
miyagawa
ダイジョブだとおもいます。
大文字小文字は区別しないってのがHTTPとかのきまりだったはず(うろ覚え)なので、ウケ側がlc() とかすればいいんじゃないでしょか。
というかTrackbackはUTF-8で送るベシっていう仕様の方が、海外のサイトにPingするときとかはイイよね、ともおもったり。
じょうの
tDiaryのトラックバックはIANA名で送る実装になってたと思いますです。
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/tdiary/plugin/trackback/tb-send.rb?rev=1.11&content-type=text/vnd.viewcvs-markup