« MacOS X 10.4 Tiger その2 | メイン | Dashboardのウィジェットを作るには »

2005年5月 3日

Safari 1.3および2.0での文字化けについて

カテゴリー: インターネット

昨日の日記でもちょっと書きましたが、Safari 1.3(MacOS X 10.3.9に付属)および2.0(MacOS X 10.4に付属)では、MovableTypeで作られたブログにコメントする際、クッキーで記憶されていた投稿者の名前(日本語の場合)が文字化けするという問題が発生します。詳しく調べてみたところ、かなり複雑な条件で発生することが分かりました。

なお、以下の内容は半分くらい私の推測で、実際にテストしたわけではありません。間違えや、もっと複雑な条件もあるかもしれません。ただ、おそらくこんな感じの現象が起こっているのは間違いないと思います。


まず原因ですが、2つあります。1つは、Safari 1.3からクッキーを保存する際の形式が変わったこと。おそらくUTF-8からUTF-16に変わったのではないかと思います。文字化けの直接の原因はこれです。変えてもいいけど、コンバートしようよ(^^;)

もう1つは、MovableType 2.xと3.xではクッキーに記述されるパスが変わったこと。2.xではコメントを投稿した際のURL(うちのサイトなら /diary/archives/ や /cgi-bin/MT/ )になりますが、3.xでは必ずルート(/)になっているようです。(仕様が変更された正確なバージョンは分かりません) 再入力しても次回また文字化けしてしまう原因がこれです。


発生条件が難しいので、以下にうちのサイトの例を書いてみます。

  • MovableType 2.xのサーバにSafari 1.2.x以前でコメント。クッキーに記述されるパスは投稿した際のURLになります。(以下、便宜上このクッキーを「旧クッキー」と呼びます)
  • サーバがMovableType 2.xから3.xにアップグレード。以前のパスも有効なため、旧クッキーが保存されたSafari 1.2.x以前のブラウザで見たときも正常に動作します。
  • ユーザーがSafariを1.3以降にアップグレード。旧クッキーは形式が違うので文字化けします。新たに投稿すると旧クッキーとは別にパスがルートのクッキーが保存されるので、2つのクッキーが残ってしまいます。ブラウザはパスの優先順位の関係で次回も旧クッキーを読み込むので、ずっと(有効期限の1年が過ぎるまで)文字化けします。

なお、MovableTypeを3.xにアップグレードしていない場合(または最初から3.xの場合)も、Safariをアップグレードしていれば最初は文字化けするようです。ただ、投稿すればクッキーが上書きされて、次から正常に機能するんじゃないかと思います。


対策方法は以下のいずれかになるでしょうか。

  • 1年間待つ(笑) 旧クッキーの有効期限が1年なので、それを過ぎると自然に直るはずです。
  • ユーザーにSafariの環境設定からクッキーを削除してもらう。(クッキーの名前はmtcmtauthで、複数あるはずです)
  • MovableType 3.xのプログラムを修正して、旧クッキーを明示的に削除するようにする。

3番目の方法は、ソースのどこをいじればいいか調べはついていますが、テストしていないので今は書かないでおきます。気力があったら後でやってみたいと思いますが、まあ、うちみたいな小規模なサイトは2番目の方法で勘弁してもらえるかな(^^;)



コメント

よろしければコメントしてください。

※メールアドレス以外の項目はこのページ上に公開されます。個人情報などの入力にはご注意ください。




保存しますか?


「投稿」ボタンを押してから書き込み完了までに多少時間がかかる場合があります。ご了承ください。