« Macブラウザと半角円マーク/半角バックスラッシュ(Shift_JIS編) | トップページ | Macブラウザと半角円マーク/半角バックスラッシュ(EUC-JP編) »

2006/10/04

Mac版Operaと半角円マーク



企業で導入するIT製品選びをサポート【キーマンズネット】

Mac版Operaは、ユーザーシェアの観点から言うと、率直に言って、無視してもほとんど問題にならないぐらいです(私のサイトで約0.01%。1万人に1人です)。ただ、Mac版ブラウザ全体・MacというOSが抱える問題にハイライトを当てる意味では、これから説明する問題は好材料だと思います。

●Macブラウザと半角円マーク/半角バックスラッシュ(Shift_JIS編)
http://shimax.cocolog-nifty.com/search/2006/10/macshift_jis_927b.html

でも予告しましたように、Mac版Operaでは、半角円マークが「¥」に文字化け する現象が(Shift_JISのページだけでなく、EUC-JPのページでも)発生します。ここで、「文字化け」をイタリックにしたのには意味があります。Operaの開発者はこれは「文字化けでない。MacOSの仕様に忠実に沿った仕様である」と考えているかもしれないからです。

実際、「¥」は数値文字参照型ではありますが、「¥」のように半角円マークらしきものが表示されます。ただ、この半角円マーク、Windowsで見ると、いつもの円マーク「\」とは微妙に異なるように見えます。円マークのVの部分が違うというか・・・。拡大してみますと、



のようになります。たしかにデザインは異なります。

実際、Windowsで普通に入力した半角円マークのcharcodeは92ですが、「¥」で表示された半角円マークのcharcodeは165ですから、異なります。ただ、そうは言っても、「文字化け」というのは言い過ぎかもしれません。「¥」を$マークや韓国ウォンと見間違う可能性はゼロですし、「Safariが半角バックスラッシュを勝手に全角バックスラッシュに変換してしまう不具合を抱えている点」と比べれば何でもないことなのかもしれません。

しかしながら、例えば、PHPでプログラミングをしているサイトで、セキュリティ対策のためにhtmlspecialchars関数を使っている場合、数値参照文字たる「¥」は「¥」に変換されてしまうため、掲示板などのWEBアプリケーションにおいて、「¥」がそのまま表示されてしまいます。半角円マークでも、半角円マーク第2号(charcodeが92ではなく165番であるという意味で。)でもなく、「&」「#」「1」「6」「5」「;」という6文字から成る文字列です。これは、誰が何と言おうと、明らかに文字化けです。

Mac版Operaの開発者は、自分たちの責任ではなく、そのような掲示板を作っているプログラマーの責任であると思うかもしれませんが・・・、です。

確かに、PHPプログラマーが安易にhtmlspecialchars関数を使うのではなくて、手動で「<」「>」「"」のみを変換するようにすればいいのかもしれません。あるいは、htmlspecialchars実施後、もう一度「&amp;」を「&」に変換させるような処理をすべきなのかもしれません。実際、PHPのhtmlspecialcharsに関するマニュアルページのディスカッション・コーナーでも、いくつかそういう書き込みが見受けられます。

しかし、私の無知なのでしょうが、私はhtmlspecialchars関数がなぜ「&」(アンバサンド)を変換対象にしているのかよく理解できていないので(「<」や「>」が危険であり、「"」をエンコードしなければ、プログラムがバグってしまうケースがあることも分かっています。)、正直、この「&amp;」を「&」に戻すやり方で、セキュリティ上良いのか分かりません。

むしろ、htmlspecialchars関数が「&」をわざわざ「&amp;」に変換しているのだから、(少なくとも特定のケースに置いては)何か意味があるはずであり、その意味をはっきり知るまでは、怖くて、こういうことができないですね。

Mac版Operaの開発者は、それは「あんたたちの事情でしょう。」と考えるかもしれませんが、私は、一覧表にも書きましたように、Mac版Firefoxの仕様が最高だと考えています。理想的な処理の最終的姿だと考えています。MacがOS内部で、半角円マークと半角バックスラッシュを区別しているのは良いですが、URLエンコード時にはどちらも%5Cにエンコードしてもらうのが一番だと考えています。



それは、Netscape・Firefoxの発展の歴史に垣間見える「進化の方向性」から考えてみても、その仕様が最も妥当であると考えています。ここで、一覧表のうち、Netscape・Firefoxの部分だけ取り出してみます。

ブラウザ名 (JavaScriptで取得したcharcode。92であれば、16進数で0x5Cを意味します。)GET/POSTで送信時のURLエンコードブラウザ進化
の歴史
Firefox 1.5.0.7
(ビルド日時: 2006年9月9日)
Camino 1.0.3
SeaMonkey 1.0.5
(Tiger/Panther)
半角円マーク・・・165%5C
半角バックスラッシュ・・・92
Netscape 7.1(Tiger/Panther)

ビルド日:20030624
半角円マーク・・・165%5C
半角バックスラッシュ・・・92
(ただし、見た目は半角円マークと区別が付きません。)
Netscape 7.02(Panther)
(ビルド日:20030208)
半角円マーク・・・165 %26%23165%3B
これをデコードしますと、「&#165;」=「¥」になります。よくみると半角円マーク「\」とは異なることが、Windowsでは分かります。
半角バックスラッシュ・・・92
(ただし、見た目は半角円マークと区別が付きません。)
%5C
Netscape 7.02
(OS 9.2.2)

(ビルド日:20030208)
半角円マーク・・・165%26%23165%3B
これをデコードしますと、「&#165;」=「¥」になります。よくみると半角円マーク「\」とは異なることが、Windowsでは分かります。
半角バックスラッシュ・・・165
(ただし、見た目も半角円マークと区別が付きません。多分一緒。)

半角バックスラッシュを%5CでURLエンコードすべきなのは、恐らく議論の余地はないため、OS9.x用のNetscape 7.02の仕様は全くまずいです。この問題は、OSX用のNetscape 7.02では解消されています。ビルド日が一緒なので、OSに依存する仕様だったのかはわかりませんが、とにかくバックスラッシュは%5Cにエンコードしなければまずいです。(Safariのように見た目だけ似たものにするために全角バックスラッシュに変換してしまうような仕様は論外です。)

さて、OSXにおけるNetscape 7.02は7.1にアップグレードするにあたり、半角円マークを「%26%23165%3B」にURLエンコードする仕様を改めて、「%5C」にエンコードするように変更しました。私はMac版Operaも、このNetscape 7.02から7.1へのアップグレード時の仕様変更と同じことを今、成すべきだと思います。

さらに言えば、Netscape 7.1では半角円マークも半角バックスラッシュも、同じ「半角円マーク」の表示を行いますが、MacOSの利点ともいうべき「半角バックスラッシュと半角円マークを区別して入力できる」特質を活かして、表示上は区別して表示されるように(しかし、URLエンコード時には同じ%5Cでエンコードされるように)したFirefoxの形まで進化すべきなのではないかと、個人的には思います。

「OSの内部的に165というcharcodeをもつ文字をURLエンコードした際に、「%5C」(=10進数で結局92)にURLエンコードするのはおかしく、かといって、「%A5」(=10進数で165)というのはShift_JISの範囲外なのだから、数値参照で処理して何が悪い?」というのも分かります。MacOSの仕様にもっとも近い処理かもしれません。しかし、上述のようなセキュリティ対策との兼ね合い、及び、

「Windowsをメインに使用しているユーザーが、(ブログなどオンライン上でJavaScriptなどのプログラムを入力していることを想定してください。)エスケープ文字のつもりで、半角円マークをMac版Operaで入力した場合、その半角円マークはエスケープ文字の役割を果たし得ません。」という事実を考えると、やはり、Mac版Operaには、その仕様を変更してもらいたいものです。

 もちろん、「郷に入っては郷に従え」?で、「仮にもMacユーザーたるもの、エスケープ文字にはバックスラッシュを入力すべきである。円マークはあくまでも円マークであり、お金の単位である。Windowsユーザーはこれだから困る。なぜ、円マークを入力するのか?」という意見もあるかもしれません。

結局、結論的には、「Windowsユーザーが圧倒的であるがゆえに妥協せざるをえないのでは?」ということになってしまっているかもしれません。そうなると、誇り高きMac開発者の方は、余計に、「なんで自分たちがWindowsに合わせないといけないの?」と思うのかもしれません。



|

« Macブラウザと半角円マーク/半角バックスラッシュ(Shift_JIS編) | トップページ | Macブラウザと半角円マーク/半角バックスラッシュ(EUC-JP編) »

コメント

コメントを書く



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


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



トラックバック

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

この記事へのトラックバック一覧です: Mac版Operaと半角円マーク:

« Macブラウザと半角円マーク/半角バックスラッシュ(Shift_JIS編) | トップページ | Macブラウザと半角円マーク/半角バックスラッシュ(EUC-JP編) »