【PR】 自宅でエステ・ソワンソニック

【PR】 パソコン・PDA・デジカメ・DVDレコーダーなどデジタル家電もAmazon.co.jp

【PR】 ソフトの購入はダウンロード販売がお得です。

【PR】 失敗しないレンタルサーバの選び方
 

右クリックを禁止したら、ネットスケープ4.Xでフォームの文字入力が文字化け



WordPress・MTOS簡単インストール機能対応!レンタルサーバー『ヘテムル

HTMLソースを隠したい時や画像の二次利用を防止するために、いわゆる右クリック禁止処理を行う場合もあるかと思います。ところが、右クリック禁止処理(正確に言うと、『HTMLソース表示禁止処理』)を加えると、Windows版ネットスケープ4.Xで入力フォームがある場合に文字化けが発生することがあります(Mac版ネットスケープ4.7では発生しませんでした)。

この文字化けは、ページの文字コードがShift_JISでもEUC-JPでも発生し、また文字化けの仕方は同一です。特徴としては半角カタカナがやたらと現れるということです。実際にどの文字がどのように文字化けするのか、16進ダンプを取りながら調べてみます。ここでも、 を使ってURLエンコードします。

元の
文字
URLエンコード文字化け
(実際は半角)
URL
エンコード
%82%A2%A2
%82%A4%A4
%82%A6%A6
%82%CD%CD
%8ERRR
%90iii
%8D%82(なし)(なし)
%8E%9A(なし)(なし)
%88%EA(なし)(なし)
%92%C3%C3
%8B%D6%D6
%95%5C\%5C
%8E%7E~(チルダ)%7E
%E6%5D]%5D
%FA%B1%B1

左の一覧表を見て、法則を見つけ出してみてください。今回の文字化けは、Shift_JISのページをEUC-JPの文字コードと誤認したりなどの理由ではなく、明らかに一部の16進ダンプが欠落しています。欠落しているのは、「%8x(xは任意の16進数)」「%9x」「%Ex」「%Fx」です。「%5x」や「%Ax」などはそのままです。つまり、漢字の場合、Shift_JISコードにおける漢字の出現パターン(1バイト目が0x81〜0x9Fもしくは0xE0〜0xFF)により、1バイト目は必ず欠落します。Shift_JISの2バイト目は0x40〜0x7E、0x80〜0xFCですから、"生き残る"場合もありますが、欠落して、結果的に「高(0x8D82)」のように何も表示されないケースもあります。

この仮定が正しいのかどうか検証するために、また、Flashフォームを作成してみました。また、ネットスケープ4.Xをお持ちの方は、 で実際に入力してどのように文字化けするのか検証してみてください。



例えば、「あいうえお」と入力して文字化けの仕方を確認してみてください。


この文字化けの原因は何でしょうか? 調べてみると、右クリック禁止のために、ネットスケープ4.X対策として、

window.captureEvents(Event.MOUSEDOWN | Event.modifiers | Event.KEYDOWN);

などとしますが、これにより、キー入力した際のイベントを拾おうとする余り(「Event.KEWDOWN」の部分)、文字化けが発生するようです。「Event.KEWDOWN」を外して、「window.captureEvents(Event.MOUSEDOWN | Event.modifiers);」とすれば、文字化けは解消しますが、ショートカット(Ctrl+U)で、ソースを表示させることが可能になってしまいます。(マウスイベントは拾えていますので、所謂「右クリック禁止」は依然として有効のままです。)

サイト訪問者に日本語を入力させないページであれば全く問題ありませんが、もし、入力フォームのページでHTMLソースを守ろうして、右クリック禁止のみならず、ショートカットによるソース表示防止策までやってしまうと、ネスケ4では文字化けが発生するので要注意ということになります。

なお、右クリック禁止については、下記のサイトを参照してください。

(参照)▼ 右クリックを禁止する(カスタマイズメニューの表示)
http://www.broadband-xp.com/hidesource/contextmenu.html
HTMLソースの隠し方」より。右クリック禁止(デフォルトのコンテクストメニュー表示禁止)する代わりに、代替カスタマイズメニューの表示を提唱している。

次のページでは、文字コードとセキュリティについて考えてみます。