トラックバックの文字化け解消。

最近、MySQLサーバの調子が悪いです。
まぁ、さくらインターネットのMySQLサーバは終わってる、ってのが定評らしいので、
それはそれで仕方がないとして(文句はきっちり言わせてもらいますが)
MySQLが不安定だと、エントリやコメントの投稿時にわけわからんエラーが出ます。
要するに、データベースにアクセスできなくて、
必要な情報がそろわないってことなんですけど、そんなこと言われても困る!

案の定、今日、Sleipnirのエントリを書いてアップしようとしたら、アップできない。
トラックバックも設定していたので、下手に何度もやって、
トラックバックが重複しちゃったら申し訳ないので、
対象のエントリをリロードしつつ、エントリアップを何度か試みる。

しばらくして機嫌直したのか、何とか正常に完了…
念のためトラックバック確かめたら…っ!文字化けしてる!

そういえば最近他のサイトでもあったなぁ…(どこだったかは失念)と思って、
トラックバックの文字化けに関して調べてみたら、
出てくるわ、出てくるわ。
皆さん悩んでおられるんですね。

んで、その中で一番怪しいな、と思ったのは、
エキサイトブログとの文字コードの相性というか、そんなの。
エキサイトブログ宛に送るトラックバックは、UTF-8じゃないと、文字化けするんだそうな。
で、トラックバックの文字コードは、エントリの(つまりMTの)文字コードに従うから、
内から送られるpingは、EUC-JPってことだ。
そうなのか。
じゃ、これを、UTF-8にしてやれば良いんだな。


…どうやって?




まぁ困ってる人がたくさんいる以上、
解決策は必ずどこかにあるわけだが、…ありました。


Exciteブログでトラックバックが文字化け解決策
早速トラックバックをしてみたところ見事に文字化けしちゃいました(汗)。調べてみたら文字コードの違いによるものだそうです。私のMTブログの文字コードは「Shift_JIS」、トラックバックを送ったExciteブログは「UTF-8」でした。本来は、トラックバックを「UTF-8」で送らなければいけないようですが、MTブログでは、指定した文字コードで送っちゃうみたいなのです!

一つUTF-8でブログを運営しているんだけど、IEのバグにより問答無用で文字の書体が「明朝体」になってしまうんですよ!これは、一大事「ゴシック体」好きの私にはとても堪えられない!そんなわけで、Shift_JISかEUC-JPでの運営になっちゃうわけなんです。で、WindowsなのでShift_JISの方が扱いやすいわけなんですよー♪でも、それだとなんの解決にもなんないんですよね(汗)。


うん。結局、便利だしね…日本語文字コードで管理する方が。
まぁまた、ドメスティック野郎だと罵られそうだが(苦笑)
知ったこっちゃないわけで。

で、解決策は、簡単に言うと、
MT.pmをハッキングして、pingの内容作成時に、
文字コードをUTF-8に変換してしまおう、というもの。
対策の根本的な出自は、ミラーノさん(知らない人はモグリですな)なのだけど、


Milano::Monolog: 日本語パッチの内容公開


そこから、この文字化け対策の部分だけを抜き出して、
MT3.151用にアレンジしたものを、前述のエントリでPONTAさんが書いてくれているので、
そこからコードを引用したいと思います。

## Build query string to be sent on each ping.
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);
my $qs = join ‘&’, @qs;
## Build query string to be sent on each ping.
require Jcode;
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(Jcode->new($entry->title, $charset)->utf8);
push @qs, ‘url=’ . MT::Util::encode_url(Jcode->new($entry->permalink, $charset)->utf8);
push @qs, ‘excerpt=’ . MT::Util::encode_url(Jcode->new($entry->get_excerpt, $charset)->utf8);
push @qs, ‘blog_name=’ . MT::Util::encode_url(Jcode->new($blog->name, $charset)->utf8);
push @qs, ‘charset=utf-8’;
my $qs = join ‘&’, @qs;


と、これで準備OK。

では早速、エキサイトブログにテスト用のブログを作って
トラックバック打ってみようか…よし、問題ない!
うむ。


UTF-8以外のサイトにトラックバック打って大丈夫なのか…
という不安はあるけれども、
まぁその辺はそん時に悩めばいいや。