• ベストアンサー

受け取ったパラメータが文字化け

お世話になります、JavaScript初心者です。 GET送信によるパラメータを他ページに受け渡して表示をさせると 各ブラウザで以下のような現象が起こります。 □Windows ・IE8:正常に表示 ・IE7:正常に表示するがエラーが表示される (エラー内容:「'document.form1.courseno.value'はNullまたはオブジェクトではありません。」) ・IE6:表示されずにエラーが表示される ・FF/chrome:文字化け □Macintosh ・safari/FF:文字化け 様々なサイトのソースを参考に自分なりに書いたのですが、 初心者なものでどこが原因なのか見当もつきません。 以下に該当するソースを明記いたしますので、ご教授いただければ助かります。 /* ↓↓↓パラメータを渡すページ↓↓↓ */ <script type="text/javascript"> function send() { var courseno=course=day=price=""; /* コード変換 */ courseno=escape(document.form1.courseno.value); course=escape(document.form1.course.value); day=escape(document.form1.day.value); price=escape(document.form1.price.value); } </script> <body> <form action="#" method="get" name="form1"> <p><a href="get.html?courseno=4074&course=水晶岳岳&day=12月25日&price=93,000円" onclick="send();">お申込み</a></p> </form> </body> /* ↑↑↑パラメータを渡すページ↑↑↑ */ /* ↓↓↓パラメータを表示させるページ↓↓↓ */ <script type="text/javascript"> function pramWrite() { var pram=location.search; /* パラメータがない時は処理しない */ if (!pram) return false; /* 先頭の「?」を削除して「&」で分割し配列へ */ pram=pram.substring(1); var pair=pram.split("&"); var i=temp=""; var key=new Array(); for (i=0; i < pair.length; i++) { /* 配列の値を「=」で分割 */ temp=pair[i].split("="); keyName=temp[0]; keyValue=temp[1]; /* キーと値の連想配列を生成 */ key[keyName]=keyValue; } var courseno=course=day=price=""; courseno=unescape(key["courseno"]); course=unescape(key["course"]); day=unescape(key["day"]); price=unescape(key["price"]); document.form1.pram.value="コースNO:"+courseno+"\n"+"コース名:"+course+"\n"+"出発日:"+day+"\n"+"旅行代金:"+price+"\n"; } </script> <body onload="pramWrite()"> <p>受け取ったパラメータを表示</p> <form name="form1" action="#"> <textarea name="pram" cols="40" rows="4" readonly="readonly" wrap="off" style="border:0;overflow:visible"></textarea> </form> </body> /* ↑↑↑パラメータを表示させるページ↑↑↑ */ 以上、よろしくお願いいたします。

この投稿のマルチメディアは削除されているためご覧いただけません。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ごめん!もうねむくて、かいとうではないのだけれど var courseno=course=day=price=""; って、coursenoいがいは、ぐろーばるだよ! unescape()は廃止への・・・・ なので encodeURIComponent()とか decodeURIComponent() に。 https://developer.mozilla.org/ja/Core_JavaScript_1.5_Guide/Predefined_Functions/escape_and_unescape_Functions <form>のnameはidに。 document.form1.pram.valueを document.forms['form1'].elements['pram'].valueとかに

kaseee
質問者

補足

回答どうもありがとうございます。 指摘いただいた各グローバル変数を「var course="";」という風にそれぞれローカル変数にいたしました。 各コード変換の箇所も 「var courseno=encodeURIComponent(courseno);」 「courseno=decodeURIComponent(key["courseno"]);」 とそれぞれ変更したところ、無事に表示されました!!! ただIE6だけはエラーが表示されるのですが、 これは複数のIEを共存させる「Multiple_IE」のせいなのでしょうか? それとも今回のJavaScriptに問題があるのでしょうか? もし原因などが分かるようでしたら指摘してもらえると助かります。

すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.2

> <a href="get.html?courseno=4074&course=水晶岳岳&day=12月25日&price=93,000円" JavaScriptとか関係有りません。 URLエンコードをブラウザに任せる場合は、「(UTF-8やShift_JISなどの)文字コード不明データ」として、文字コードの変換を行って下さい。 <a href="get.html?%48">などとあらかじめ%nn形式のURLエンコードをしておけば、 そのまま送信されますので文字コードの判別が不要になります。

kaseee
質問者

お礼

回答どうもありがとうございます。 そうですね、あらかじめURLエンコードしておけば良いのですが、 リンク設定をする人たちのスキルの問題があり、 分かりやすくするため日本語でパラメータをと考えております。 他にもっと良い方法があるのかもしれませんが、 なにぶんJavaScript初心者なもので、この方法しか思いつきませんでした。 また機会があればアドバイス宜しくお願いします。

すると、全ての回答が全文表示されます。

関連するQ&A