リダイレクト時のURLクエリ文字列の取得に関する質問

このQ&Aのポイント
  • スクリプト内のURLクエリ文字列の取得に関して質問があります。
  • スクリプト内でURLクエリ文字列を取得し、リダイレクトさせる際に発生する問題について知りたいです。
  • JavaScriptからリダイレクトする際に、URLエンコードの必要性とその手順について教えてください。
回答を見る
  • ベストアンサー

リダイレクト時のURLクエリ文字列の取得

hoge.html <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp" /> </head> <body> <script language="javascript"> <!--// function windowOpen() { window.open("hoge.php?name=" + document.getElementById("data").value, "new_window"); } --> </script> <input type="text" id="data" /> <input type="button" value="new window" onclick="windowOpen()" /> </body> </html> hoge.php <html> <head> <meta http-equiv="content-type" content="text/html; charset=euc-jp" /> </head> <body> <?php echo $_GET['name']; ?> </body> </html> このようなスクリプトがあった時(表示の際の文字コードは任意で)、 文字列をエンコードせずJavaScriptからURLをリダイレクトさせている為、 IE6では、PHP側の$_GET['name']が正常に受け取る事が出来ません。 (Firefoxではアクセスした時点で自動的にURLエンコードしてくれるので 問題ないのですが) これを、JavaScript側でURLエンコードさせてからリダイレクトさせるのではなく、 PHP側で回避させる為にはどういった作業をどういう手順で行えばいいのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.2

>今回のは、JavaScriptを用いなくてPHP側からでも可能なのか?という経緯から >質問させて頂く事になりました。 なぜURLエンコードという仕組みがあるのか(必要なのか)ということですよね。そうしないとマトモに送れない(&受け取れない)からです。マトモに送れないものを受け取ってから足掻いても「ダメなものはダメ」ということで(苦笑)。

naktak
質問者

お礼

やっぱりそうですよねー。 いやぁ、別に作り方の問題なんですけど、もしそんな事 できたら選択肢が増えるなーと思いまして。 色々試した結果、やっぱりサーバ側で受信した時点で データはぶっ壊れてるみたいですね。 でもGoogleは検索結果のクエリを直接書き換えると、 何故かいけたんですよ。 そこでまた疑問符が、って感じになっています。 実際問題、そういった対処を行う事はありませんけどね・・・。 ありがとうございました。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

#個人的には「素直にURLエンコードすべき」だと思いますけど。 $_SERVER['QUERY_STRING']を自前で展開してどうにかしてください(それ以上のことは無理です)。

naktak
質問者

お礼

ありがとうございます。 > #個人的には「素直にURLエンコードすべき」だと思いますけど。 これについては全くもって同じ意見です。 今回のは、JavaScriptを用いなくてPHP側からでも可能なのか?という経緯から 質問させて頂く事になりました。 「あ」という文字がクエリできた時、UTF-8の文字コードらしきものが 「e7b8ba」となるのでダメってことなんでしょうかね・・。

関連するQ&A

  • スクレイピングで取得した文字を変数表示

    javascriptでiphoneアプリを作成中です。 ゲームにあたり、自社サーバーのhoge.ne.jp/read1000.php上のデータベース 情報をスクレイピンクしてiphone上で表示させます。 下記により、「hoge.ne.jp/read1000.php」にあるソースの中から 「吉本」の文字をスクレイピング表示することが可能です。 ****【hoge.ne.jp/read1000.php】(DBサーバー)********************        <td class="class3_sql_name">吉本</td> ****【hogehoge.com/index.html】(iphone仮想サーバー)**************   <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.xdomainajax.js"></script> <script> url = 'http://hoge.ne.jp/read1000.php'; $.get(url, function(data){ var content3_sql_name = $(data.responseText).find('.class3_sql_name').text(); $("#text3_sql_name").text(content3_sql_name); }); </script> <div id="text3_sql_name"></div>  //←この部分にhoge.ne.jpからスクレイピング                       した吉本の文字が表示される ************************************************************ やりたいこと ここで取得できた「吉本」の文字を変数としてjavascript上で表示させたいと考えています。 下記のようにしたのですがグローバル変数、ローカル変数とも表示出来ません。 どうすれば表示できるでしょうか? ****【hogehoge.com/index.html】(iphone仮想サーバー)************* <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <script type="text/javascript" src="./js/jquery.xdomainajax.js"></script> <script> url = 'http://hoge.ne.jp/read1000.php'; $.get(url, function(data){ var content3_sql_name = $(data.responseText).find('.class3_sql_name').text(); $("#text3_sql_name").text(content3_sql_name); //テスト用としてグローバル変数追加 content3=$("#text3_sql_name").text(content3_sql_name); }); </script> <script> document.write(""+content3_sql_name+""); </script> <script> document.write(""+content3+""); </script>  ↑上記のふたつとも表示出来ない 宜しくお願い致します。

  • 別URLからのJSON取得がうまくいかないので教えてください

    楽天書籍検索APIをJSONで取得したいのですが、うまく表示されません。 以下のソースで何がまずいか教えていただけますでしょうか。 ※[YOUR_developerID]にはIDが入っているものとします <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>JSON</title> <meta http-equiv="Content-Script-Type" content="text/javascript" /> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">google.load("jquery", "1.2.6");</script> <script type="text/javascript"> $(function(){ $.getJSON("http://api.rakuten.co.jp/rws/2.0/json?developerId=[YOUR_developerID]&operation=BooksTotalSearch&version=2009-03-26&keyword=%E3%82%AC%E3%83%B3%E3%83%80%E3%83%A0&sort=-releaseDate", function(jsonData){ $(jsonData.Body.BooksBookSearch.Items.Item).each(function(){ $("body").append(this.title+"<hr />"); }) }) }) </script> </head> <body>

  • データの引継ぎについて

    はじめまして 早速ですが、「test-1.html」のダイアログをsubmitし、「はい」が 選択された場合「test-2.html」のある値(value="0")に1を加算させ たいのですがデータの引渡し(加算)方法がよくわかりません。 JavaScript間もしくは、JavaScriptとHTML間でのデータの引渡し 方を教えていただけないでしょうか? 宜しくお願いいたします。 「test-1.html」↓ <html> <head> <title>tets1</title> <meta http-equiv="Content-Style-Type" content="text/html; charset=EUC-jp"> <script language="JavaScript"> <!-- function window_confirm(){ if(window.confirm("加算しますか?")){ window.alert("加算されました。"); document.form1.es_no2.value = "1" }else{ window.alert("キャンセルが選択されました。"); } } //--> </script> <body> <form action="test-2.html" method="post" name="form1" onclick="window_confirm()"> <input type="submit" value="改定"> </form> </body> <html> 「test-2.html」↓ <html> <head> <title>tets2</title> <meta http-equiv="Content-Style-Type" content="text/html; charset=EUC-jp"> <body> <form action="test-3.html" method="post" name="form2"> <input type="text" name="no_2" value="0" id="#" > <input type="submit" value="次へ"> </form> </body> <html>

  • javascript + php でエラー

    エラーを取り除くことができず、困っています。 助けてください。 下記のようなコードで、PHPからjavascriptに文字列を渡しているのですが、 文字列に改行コードがあるとエラーになってしまいます。 (改行コードがない場合はエラーはでません) 文字コードはEUC-JP、改行はLFとしています。 エラーの原因と、対策を教えてください。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function sampl(str) { alert(str); } //--> </script> </head> <body> <form method="post" action="#"> <?php $str = "テスト\n改行あり"; ?> <input type="button" value="実行" onClick="sampl('<?=$str?>')"> </form> </body> </html>

  • FireFoxでfocus()が上手く動かない

    javascriptを使って、 フォームのテキストエリアの入力文字数をチェックし、 オーバーしていれば、アラートを出し、テキストエリアにフォーカスを移動させる。 ようにしようとしています。 IEでは動いてのですが、FireFoxだと上手くフォーカスが移動してくれません。 どこがまずいのか、教えてください。 コード <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <script type="text/javascript"> <!-- function checkText(aText) { if (aText.value.length > 1) { alert('サイズオーバーです'); aText.focus(); } } //--> </script> </head> <body> <form method="post" action="#"> <input type="text" name="fmTitle" onBlur="checkText(this)"> <input type="text" name="dummy"> </form> </body> </html>

  • Event.observe について教えてください。

    javascript および prototype.js について理解が中途半端なのですが、Event.observe() の 'click' 指定で、関数に引数を渡すにはどうしたらよいでしょうか?そんなことできないのでしょうか? どういうことかといいますと、まず次のようなプログラムは動かすことが出来ました。 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <script src="prototype.js" type="text/javascript"></script> </head> <body> test page <form name="form1"> <input type="button" name="exe" value="実行" id="b1" > </form> </body> </html> <script type="text/javascript"> function myfunc(){ return confirm('exe ?'); } Event.observe($('b1'), 'click', myfunc, false); </script> ------------------------------------- なのですが、この myfunc()関数に引数を与えれたらよいな、と思いまして、 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <script src="prototype.js" type="text/javascript"></script> </head> <body> test page <form name="form1"> <input type="button" name="exe" value="実行" id="b1" > </form> </body> </html> <script type="text/javascript"> function myfunc(a){ alert(a); return confirm('exe ?'); } Event.observe($('b1'), 'click', myfunc(3), false); </script> のようにしてみましたが、これは意図通り動かず、何故か画面をロードした時に、myfunc()関数も呼ばれているようです。 何分理解が中途半端なので、わたしがよく分かっていないことがあるのだと思いますが、どなたかご教授していただけたら嬉しいです。よろしくお願い致します。

  • jqueryで抽出した文字をURLに代入したい

    下記のように他のページhoge.ne.jp/read1000.phpからスクレイピングしたtakahashiという文字を、メインメインサイトhogehoge.jp/index.htmlの<input type="text">内に表示可能なスクリプトがあります。 【現在できていること】 ***************************************************************** 【http://hoge.ne.jp/read1000.php】 <table border="1"> <tbody> <tr> <td class="class3_sql_name">takahashi</td> </tr> </tbody> </table> 【http://hogehoge.jp/index.html】 <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script> <script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> <script> // 引っ張ってきたいサイトのURL url = 'http://hoge.ne.jp/read1000.php'; $.get(url, function(data){ var content3_sql_name = $(data.responseText).find('.class3_sql_name').text();   $("[name='ca2_stock_name']").val(content3_sql_name); }); </script> <input type="text" name="ca2_stock_name" value="" /> ***************************************************************** 上記のスクリプトを実行すると、 <input type="text" name="ca2_stock_name" value="takahashi" /> という形が完成します。 ****************************************************************** 【やりたいこと】 <input type="text" name="ca2_stock_name" value="takahashi" /> ではなく、 <a href="stock.php?name=takahashi">個人ページに移動</a> というように、スクレイピングしたtakahashiの文字をURL内に表示したいと考えています。 考え方としては、変数として切り取り、URL内に +my_name+ という形で代入しようと思います。 ダメだったスクリプトその1 <script> url = 'http://hoge.ne.jp/read1000.php'; $.get(url, function(data){ var content3_sql_name = $(data.responseText).find('.class3_sql_name').text(); }); </script> <a href="stock.php?name="+content3_sql_name+"">個人ページに移動</a> ダメだったスクリプトその2 <script> url = 'http://hoge.ne.jp/read1000.php'; $.get(url, function(data){ var content3_sql_name = $(data.responseText).find('.class3_sql_name').text(); }); var my_name = .text(content3_sql_name); </script> <a href="stock.php?name="+my_name+"">ストックページに移動</a> 上記のように2つを試したのですが、takahashiという文字が代入されることはありませんでした。 どうすれば、takahashiという文字をURLに代入させることができるでしようか? よろしくお願いいたします。

  • javascript php 連携

    よろしくお願いします。 javascriptの『onchange』値をPHPの変数に入れたいと苦戦しています。 <html> <head> <script type="text/javascript"> function hoge1(){ var x = $('str1').options[$('str1').selectedIndex].text; やりたいことはここでPHPの変数『list_a』にjavascriptの変数『x』の値を入れたいです。 } </script> </head> <body> ここに結果表示 <?= $list_a; ?> <select id="str1" name="str1" onchange="hoge1()"> <option>hoge1</option> <option>hoge2</option> <option>hoge3</option> </select> </body> </html> よろしくお願いいたします。 ちなみにAjaxは全くわかりませんのですいません。。。

    • ベストアンサー
    • PHP
  • 特定の時間帯だけ有効にする

    以下のスクリプトはウィンドウを同時に2つ開くものですが、20~23時の時間帯だけスクリプトを有効にしたいです。 どのように記述すればできますか? <SCRIPT TYPE="text/javascript"> <!-- function WindowOpen(){ window.open("ttp://192.168.0.12/cgi-bin/music/","window","toolbar=no, height=200, width=200"); window.focus(); } //--> </SCRIPT> </HEAD> <BODY> <A HREF=ttp://192.168.0.12/ onClick="WindowOpen();window.focus();">トップページへ</A>

  • 送信データの受け取りについて

    ご教授願います。 ページ1からMETHOD="get"で値をSubmitして ページ2で受信したいのですが、 ページのURLバーのアドレスの最後に「?ACT=3」と 記載されているにもかかわらず、 ページ2内での$_get['ACT']で 値を拾えませんし、$ACTも確認できません。 どの様な原因が考えられるのでしょうか。 <環境> IE 7.0.5730.13 PHP 5.2.6 <プログラム> *ページ1 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- function Cli_Submit(){ ListForm.action = "Test_submit2.php"; ListForm.submit(); } // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="get"> <TD><INPUT TYPE="text" NAME="ACT"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML> *ページ2 <html> <head> <meta http-equiv="Content-type" content="text/html; charset=Shift_JIS"> <script type="text/javascript"><!-- // --></script> </head> <BODY> <FORM NAME="ListForm" METHOD="post"> <TD><INPUT TYPE="text" NAME="ACT" VALUE="<?php print $_get['ACT'] ?>"></TD> <TD><INPUT TYPE="button" VALUE="Submit" onClick="Cli_Submit()"> </FORM></BODY></HTML>

    • 締切済み
    • PHP

専門家に質問してみよう