DrupalのTrackBack
モジュールをテストしてきたのですが、日本語ページからのトラックバックがうまく表示されませんでした。エンコーディングが正しく認識されないのが問題です。
今回は問題はいくつもの要因が重なった結果でした。まずトラックバックを送る側がエンコーディングを指定していませんでした。TrackBackモジュールは送られてきたエンコーディングを使うのですが、指定されていない場合、内部でエンコーディングを検出します。
その検出でも問題がありました。サイトのロケールを使ってエンコーディングを決めるところがあるのですが、なんとロケールそのものが指定されていませんでした。その場合、自動的に英語(実際にはLatinのISO-8859-1)が使われてしまって、日本語は絶対に正しく認識されません。
そこでロケールを指定するようにしたのですが、それでもまだ正しく表示されません。日本語ロケールの場合、ISO-2022-JP, EUC-JP, SJISの3つを使って文字コードの検出を試みるのですが、それがうまく動いていません。PHPのmb_detect_encoding()にこの3つの文字コードを渡しているのですが、トラックバックの送り元はJIS(つまりISO-2022-JP)なのに常にSJISと判定されてしまいます。
幾つか調べたら、mb_detect_encoding()には検出する可能性のある文字コードとして「auto」を渡せることが判明。このautoを使ったところ、正しく文字コードが認識されるようになりました!
参考サイト:
http://cl.pocari.org/2005-07-10-1.html
(Japanese)
http://labs.gmo-media.jp/archive/21
(Japanese)
http://je-pu-pu.jp/blog/archives/2005/02/mb_detect_encod.html
(Japanese)

新しいコメントの投稿