【PR】 Bフレッツ・プロバイダ別料金比較(ファミリータイプ) 【PR】 JavaScript開発者必見! 「プランセスJS Encoder」 【PR】 中国語の学習に役立つサイト 【PR】 Bフレッツ・プロバイダ別料金比較(マンションタイプ) |
||||||
・Javascriptのprompt関数でユーザー入力を受け付けるとゴミがつく問題左のようなユーザープロンプトを表示させて、ユーザー入力を受けて、
この極めて簡単なスクリプトがなぜか、特定のブラウザで動かない。しかも、優等生であるはずのWindows版IEにおいてです。IE6.0ではこの不具合は解消されていますが、5.5や5.01では発生します。 なぜ、このような不具合が発生するのかを見るために、スクリプトを少し変更してみます。「あいうえお」と入力すると「正解です。」と表示し、それ以外の言葉を入力すると、「残念。不正解です。」と表示するスクリプトを考えてみます。
Windows版IEではescape関数はunicodeでエンコードされますから、「あいうえお」は「%u3042%u3044%u3046%u3048%u304A」となるはずですが、実際にテストしみますと、「%u3042%u3044%u3046%u3048%u304A%00%uBA00%u0296%uFFFF%uFFFF」だったり「%u3042%u3044%u3046%u3048%u304A%00%01%00%00%00」、「%u3042%u3044%u3046%u3048%u304A%00%u0150%u029D%u1B9A%00」、「%u3042%u3044%u3046%u3048%u304A%00%00%00%00%00」だったりします。明らかに、入力した文字列以上の何かがついてきています。しかも、実行するたびに違う結果になりますが、共通点があり、本来表示されるはずの「%u3042%u3044%u3046%u3048%u304A」が先頭にあり、その直後に「%00 = null」がついていることは共通しています。
このnull値がついているために、そこでJavascriptの実行がストップしてしまい、冒頭で紹介した「ユーザー入力に基づき名前を表示するというスクリプト」が日本語入力の際、正しく動作せず、その日本語の後の文字列が全部、消えてしまっていたのです。
次のページは、「EUCのページでmailtoのサブジェクトを指定するには?」です。<a href="mailto:info@shtml.jp?subject=文字化けについて">メールはこちら</a>とすることにより、ユーザーからの意見などのメールを、予めセットしておいたサブジェクト(件名)でもらうことができます。ただ、このままだとShift_JISのページでは動きますが、EUC-JPのページでは動きません。次のページでは、この対応策を考えます。
|