« Safariと半角円マーク(EUC-JP編) | トップページ | Safariと画像オブジェクトのonloadイベント »

2006/09/07

Safariと半角円マーク(Shift_JIS編)



東芝ダイレクトPCなら全国配送料無料!!

MacOSXのブラウザSafariには、フォームに入力された「\」(0x5C)の処理に関する問題があります。Shift_JISのホームページでもEUC-JPのページでも問題が起こるのですが、今日は昨日の記事とは違ってShift_JISのページで起こる問題について触れていきたいと思います。

--- 2007年6月16日20時50分ごろ追記start ---
この不具合は、2007年6月にリリースされたSafari 3.0 Betaで修正されました。
--- 2007年6月16日20時50分ごろ追記end ---

============================================================
1.Safariで入力した半角のバックスラッシュが全角のバックスラッシュに文字化けする
============================================================
Windowsでは、半角の円マーク「\」も半角のバックスラッシュもフォントによって表示される形(見た目)が違うだけで実質的に一緒ですが、Macでは半角のバックスラッシュを、オプションキーを押しながら半角の円マーク「\」が刻印されたキーを押すことで入力が可能です。つまり、Macでは半角円マークと半角バックスラッシュを区別して入力することができます。

プログラムの世界では、エスケープ文字を入力する場合、0x5Cを使いますが、この0x5Cに半角円マークが入っていることに対して何か違和感を覚えて、Safariでフォーム入力をする際に、エスケープ文字を入力しようとして、半角のバックスラッシュを入力すると、全角文字(0x815F)に文字化けしてしまうという話です。

オプションキーを使わずに、半角円マークのキーだけで入力した文字は見た目は半角円マークですが、Windowsとは違って、Safariでは0x5Cではありません。JavaScriptで調べたところ、0xA5でした。この0xA5はサーバに送信されるときに%5Cとしてエンコードされています。逆にMacの0x5Cたる半角バックスラッシュは、%81_にURLエンコードされています。ややこしい。

ですから、次のような不思議な現象が起こりえます。Safariで入力した半角の円マーク(0xA5)をサーバに送信すると0x5Cとして処理され、0x5Cのバックスラッシュをさらにサーバに再送信すると全角のバックスラッシュ(0x815F)に文字化けします。


============================================================
2.Windowsで入力した半角円マーク(0x5C)をSafariで編集すると、全角のバックスラッシュに文字化けします。
============================================================
Windowsで入力したデータを、Macで再編集する場合を考えます。<input type=text name=price value="\100">としているページをWindowsで作成したとして、このデータをSafariで表示させたとします。Windowsで入力した半角円マークは、Safariでは半角バックスラッシュに見えます。ここまでなら、Windowsでも経験することだと思います。見た目の半角円マークと半角バックスラッシュの違いはあくまでも見た目の問題であり、プログラム的な意味の違いはありません。

しかし、Safariで、このデータを、何もいじらずに更新したとすると、半角バックスラッシュ(0x5C)が全角のバックスラッシュ(\=0x815F)に文字化けします。Safariを通すだけで文字化けします。

「1.」で書きましたように、Safariで入力した半角円マーク(0xA5)は0x5Cとして処理され、逆に半角のバックスラッシュ(0x5C)が全角化することから、よけいにややこしいです。

============================================================
3.対策として、全角のバックスラッシュ(0x815F)をサーバ側で0x5Cに変換することを考えます。
============================================================
とすればいいでしょう。

============================================================
4.他のMac用ブラウザでは、この問題はどのように処理されているか?
============================================================
ちなみに、Mac版Firefoxでは、半角円マークも半角バックスラッシュも、データ送信時には%5Cとしてエンコードされるため、この問題は発生しません。また、Mac版Netscape (7.1。Tiger、Pantherでテスト)では、半角円マーク+オプションキーでも半角バックスラッシュを入力できず、半角円マークが入力されます。ここで「入力できない」というのは、あくまでも見た目の話です。半角バックスラッシュのつもりで入力され表示されている半角円マークは0x5Cであり、半角円マークのキーだけを押して入力された半角円マークは0xA5であり、内部的には区別されています。これは、JavaScriptのcharCodeAt()でも確認できます。そして、どちらの半角円マークも、Netscapeでは、データ送信される場合は、%5Cにエンコードされるため、Safariで起こるような問題は一切発生しません。

さらに、Mac版IE(5.23。Tiger、Pantherでテスト)では、半角の円マークキーとオプションキーを押して入力すると半角カタカナの「ヌ」が入力されます。ですから、データ送信されURLエンコードされると%C7になってしまいます。しかし、見た目からして、どう見ても半角のバックスラッシュには見えない半角のヌですから、「こうなって当然」と誰もが理解できるでしょう。問題は実質的にないと言えるかもしれません。また、Windowsユーザーが入力した半角の円マークはMac版IEでも、半角円マークとして表示されます。ここがSafariやFirefoxとは異なります。そして、Mac版IEで表示されている半角円マークは、0x5Cとして、Mac版IEでは処理されます。Windowsユーザーには、非常に分かりやすい仕様です。考えてみれば、同じマイクロソフト社が作っている(た)のだから当然と言えば、当然?

実は、Operaで入力した半角円マークは問題が発生するのですが、それは別の機会にしましょう。

また、このページの文章は、あくまでもShift_JISのホームページ上で起こる現象であり、EUC-JPのページでは、別の問題が発生します。EUC-JPのページで起こるSafariの半角円マーク問題はこちら



|

« Safariと半角円マーク(EUC-JP編) | トップページ | Safariと画像オブジェクトのonloadイベント »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/67411/11793579

この記事へのトラックバック一覧です: Safariと半角円マーク(Shift_JIS編):

« Safariと半角円マーク(EUC-JP編) | トップページ | Safariと画像オブジェクトのonloadイベント »