TB対策その2

このサイトでつかっているMTのバージョンは2.661。もういったいいつのよ?って感じのバージョンで、いまさらなぜ?といわれそうですが、ライセンス的にはこのバージョンが一番使いやすいのです。

ガシガシカスタマイズしちゃったんで、いまさら乗り換えるのも面倒ですしね。

というわけでTBの文字化けのお話。

さらなる問題解決をめざしてMTをハックしていると、いくつか解せないコードに出会いました。

ソースを眺めていると MT2.661に日本語化パッチをあてたものでは MT/App/Trackback.pmの中でJcodeを使用してTBに日本語以外の文字が来てもサイトの文字コード(通常UTF-8)に修正をしているのです。(sub ping() の中でやってます)

このあたり「いまどきJcodeかよ」とかいう声も聞こえてきますが、それはそもそもMT2.661をつかってる段階でそもそもどうでもいい問題なんで無視してください。(w

そんなコードが入っているのになぜ文字化けが?と実際に文字コードEUCでcharsetもEUCにしてTBを飛ばしてみたところ、該当部分がどうも実行されていなっぽいことがわかりました。これすなわち実際のところはTBとしては文字コードを指定して正しく送られており、正しく処理できていないうちのサイトが間違っているということです。なんてこった。

この関数はping全般を処理する関数ですから誰かが処理をしなければならないので、誰かが行っているはずです。となるとプラグインの MT-Blacklistが怪しい。

ということで、grepなどで調べまくり。

するとplugins/Blacklist.plでやってました。

先ほどのping関数を undefして、かわりに jayallen::MTBlPing::ping_post_hdlrに向けるようにしてるではないですか。

別なメソッドで完全に上書きしてるのでそりゃこのコードが生きないはずですわ。なんて乱暴な・・・このあたりも直す必要がありそうですねぇ・・すなおに3.Xにしろという声も聞こえてきそうですが・・全部解決されてそうですしwww

ま、とりあえず、原因がわかったということでまた一歩野望に近づいた

余談ですが、MTのコーディングもトリッキーな部分が多いんですが、日本語化パッチもそれにまけず劣らずのナルシストっぽいプログラムで追うのに苦労しました。また余計なノウハウが身につきましたよ。

perlを使い始めてはや10年くらい?それでも次のコードはぱっとみ何が起きているのかようわからんかったです。

my $incoming = {'shift_jis'=>'sjis','iso-2022-jp'=>'jis','euc-jp'=>'euc','utf-8'=>'utf8'}->{lc($icode)} || Jcode::getcode($excerpt .$title . $blog_name);


でもって、これも

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


まぁたしかに一行で書けてるけど、同じことをするのにもっとわかりやすく書けるわけで、ぶつぶつ。

プログラム言語ってのはどんな言語でも基本構造は大体一緒のものがあるので、perlなんかでもJavaやCを知ってる人ならなんとなく分かるように書くってのが重要だと思うんですよ。

その言語ならではの便利な記法ってのは確かにありますが多用しすぎると、ホントわけわからなく・・・

しかし、こんなんで悩んでいるのは日本でも私だけでしょうね。趣味の問題。ついでいうとメモしないと忘れんでそれも兼ねてますが。(それ以前にそもそも誰か解決してそうだ)
Posted by issei

カテゴリ: 雑記