TrackBackが文字化け[やっと解決か?]

「対策終わった〜」と思っていたのだけど、依然としてトラックバックを送った先で文字化けするというのが継続していた。ココログとかlivedoor BlogとかTrackback Peopleあたりに打ったやつは、盛大に文字化けしてた・・・。

ということで、自分トコ向けのTracKBackがうまくいっているようなので、どうやったかをメモ。
とりあえず調べてみたところ、「トラックバックは、送信時にUTF-8に文字コードを統一する」という、緩やか〜な決まり事があったらしい。

TrackBackが文字化け[解決?] - Soukaku's HENA-CHOKO Blog

基本的な変更は、以前やったとおりで良かったようなのだけど、MT.pmの変更箇所のちょっとしたの部分にトラップが隠れていたようで、その部分を下記のリンクに書いてあるように修正を加えました。

K's Labo: EUC環境からのトラックバック不具合解消?文字化け

とりあえず、大丈夫そうなんだけど、また様子見かなぁ〜。


以下、変更点。


eswat2:/var/www/MT3/lib# diff -u MT.pm.orig_v4_25 MT.pm
--- MT.pm.orig_v4_25    2009-03-28 22:01:22.000000000 +0900
+++ MT.pm       2009-04-18 11:57:20.000000000 +0900
@@ -1604,11 +1604,15 @@
         my $ua = MT->new_ua;
         ## 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( $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, '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;
         ## Character encoding--best guess.
@@ -1622,8 +1626,7 @@
             next if $tb_domains && lc($url_domain) !~ m/$tb_domains$/;
             my $req = HTTP::Request->new( POST => $url );
-            $req->content_type(
-                "application/x-www-form-urlencoded; charset=$enc");
+            $req->content_type("application/x-www-form-urlencoded");
             $req->content($qs);
             my $res = $ua->request($req);
             if ( substr( $res->code, 0, 1 ) eq '2' ) {

トラックバック(0)

コメントする