• 締切済み

$_SERVER["QUERY_STRING"]の仕様について

$_SERVER["QUERY_STRING"]を使用すると、クエリ情報(URLの"?"以降の文字列)を 取得できると伺ったのですが、私は、下記のように、 http://www.xxx.jp/zzz.php?url=【URL】 と、URLを値として渡すプログラムを作成しています。時にそのURL内にも「?」が 存在する場合もございます。 【例】 http://www.xxx.jp/zzz.php?url=http://www.aaa.com/ss/item.asp?code=007656&item=032648 今のところ、1番目の「?」以降、 url=http://www.aaa.com/ss/item.asp?code=007656&item=032648 を受け取ってくれてはいるのですが、何かのタイミングなどで、 2番目の「?」に反応し、バグを起こさないのか不安です。 どなたか、$_SERVER["QUERY_STRING"]の仕様についてご存知の方は いらっしゃらないでしょうか? 1番目の「?」にしか反応しないということがわかる、もしくは、 2番目の「?」にはこういう場合に反応するということがわかれば対処できるのですが。 どうぞよろしくお願いいたします。

  • 922
  • お礼率66% (4/6)
  • PHP
  • 回答数2
  • ありがとう数3

みんなの回答

回答No.2

↑ずいぶん昔の質問ですが、完了していないので回答します。 まず質問者さんが誤解されていることとして、クエリの値に?を使えると思っていらっしゃいますが、使えません。?と&はクエリの開始、属性と値の区切り文字だからです。 そこで、先の回答者さんが答えられているように、文字をエンコードして渡さなければなりません。それがURLエンコードです。?や&を含め、日本語なども全てGETクエリとして扱えるようになります。 $gettext = urlencode("$gettext"); そして、受け取る側で戻してあげます。これがURLデコードです。 $gettext = urldecode("$gettext"); これだけなのですが、質問者さんがおっしゃっていることの実現は、受け取る側だけの対処ではどうにもなりません。 送る側がエンコードしないことにはクエリの送信が出来ないからです。 JAVAでもエンコードできるメソッドはあるはずですので、送る側に依頼して下さい。

参考URL:
http://iuc.didit.jp/blog/lab/2008/12/auurl.html
  • bonyamk
  • ベストアンサー率29% (49/166)
回答No.1

パラメータに「?」はよろしくないですね そんな時はエンコードすれば問題ないです http://www.xxx.jp/zzz.php?http:%2F%2Fwww.aaa.com%2Fss%2Fitem.asp%3Fcode%3D007656%26item%3D032648 こんな感じです phpにはこれを行うためのurlencodeという関数があるので参照してください

922
質問者

補足

これは渡す側のお話ですよね? 私が触ることのできるファイルは受け取る側だけで、送る側のファイルには、 http://www.xxx.jp/zzz.php?url=【URL】 という形式で、リンクを張っていただくようお願いいたしました。 おそらく形式の変更は可能ですが、javaアプレット内にリンクを組み込むので、 urlencodeという関数は使えないと思うのですが、このような場合でも可能でしょうか? 【URL】の部分は、何が来るのかわからないのですが、「?」が存在 する場合もありますので、受け取る側で できる処理を知りたくて 質問をさせていただいております。説明不足で申し訳ございませんでした。 どうぞよろしくお願いいたします。

関連するQ&A

  • PHPでのQUERY_STRINGの使い方

    PHPを勉強中です。 URLの?以降の文字列を取得し、それが正規表現で 数字と()、/*+-の数式に一致するかどうかを割り出したいです。 echo preg_match("/[^0-9\(\)\+\*\/-]/", "$_SERVER['QUERY_STRING']"); としたところ、 Parse error: syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) とエラーが出てしまいます。記述の仕方が悪いのでしょうか。 ご教示お願い致します。

    • ベストアンサー
    • PHP
  • empty($_SERVER['REQUEST_U

    empty($_SERVER['REQUEST_URI'])とは、何のことでしょうか? 下記スクリプトの意味について教えてください。 // // Fix unavailable $_SERVER['REQUEST_URI'] on IIS // if ( empty($_SERVER['REQUEST_URI']) ) {  $_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF'];  $_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; } ▼if ( empty($_SERVER['REQUEST_URI']) ) { $_SERVER['REQUEST_URI']が空だったら、の意味が分かりません。 ページにアクセスするためのURIを指定しなかったら? それは、どんな状況なのでしょうか? ▼$_SERVER['REQUEST_URI'] = $_SERVER['PHP_SELF']; $_SERVER['REQUEST_URI']に、現在実行しているスクリプトのファイル名を利用。これは、何をしているのでしょうか? ▼$_SERVER['REQUEST_URI'] .= ( !empty($_SERVER['QUERY_STRING']) ) ? '?'.$_SERVER['QUERY_STRING'] : ''; クエリ情報(URLの"?"以降の文字列)が空でなければ、クエリ情報をくっつける。空だったら、くっつけない 結局、このスクリプトでは何をしようとしているのでしょうか? また、このスクリプトがないと、どういう不具合が起きる可能性があると、想定されるでしょうか? 検索してみたら、下記のようなページがあったのですが、 IIS(サーバ?)固有の不具合回避対策なのでしょうか? ▽Dokeos Forum • View topic - IIS $_SERVER['REQUEST_URI']   http://www.dokeos.com/forum/viewtopic.php?t=8335

    • ベストアンサー
    • PHP
  • webクエリで

    少し判りにくいかもしれませんが webクエリで情報を取得するマクロを作ったのですが Sub テスト2() Const csCode As String = "URL;https://umanity.jp/racedata/race_7.php?code=XXXX" Dim strURL As String strURL = Get開催コード生成 strURL = Replace(csCode, "XXXX", strURL) Set出馬表取得 strURL Dim 処理前シート As Worksheet Dim 処理後シート As Worksheet Dim 元データ As Range Dim ws As Worksheet Set ws = ActiveSheet Set 処理前シート = ActiveSheet Set 処理後シート = Worksheets("テスト") Set 元データ = 処理前シート.UsedRange Function Get開催コード生成() As String Dim Y As String '年 Dim D As String '日付 Dim c As String '回 Dim A As String '場所 Dim T As String '日目 Dim r As String 'レース番号 With ThisWorkbook.ActiveSheet Y = Format(.Range("A2").Value, "0000") D = Format(.Range("B2").Value, "0000") A = Get場所コード(.Range("C2").Value) c = Format(.Range("D2").Value, "00") T = Format(.Range("E2").Value, "00") r = Format(.Range("F2").Value, "00") End With Get開催コード生成 = Y & D & A & c & T & r End Function 最後のRの部分の数字 例https://umanity.jp/racedata/race_7.php?code=2019042103010610の最後の10のところが指定した数値だけ増えていって取得できるようにしたいのですができますか 例えば指定した数値が3ならば https://umanity.jp/racedata/race_7.php?code=2019042103010610 https://umanity.jp/racedata/race_7.php?code=2019042103010611 https://umanity.jp/racedata/race_7.php?code=2019042103010612 みたいにできたらとおもっています なお数値の指定についてはG2でできたたらと思っています わかりにくくすいませんがよろしくおねがいします

  • インデックスされるクエリストリングの長さの限界は

    クエリストリングは過剰でなければ検索エンジンにインデックスされますが、 クエリストリングがどれほど長くなったときにインデックスされなくなりますか? 有名のサイトではこれほど長くなっていますが、 私の場合はこちらのクエリストリングの2倍くらいの長さになると思います。 http://suumo.jp/jj/bukken/ichiran/JJ010FJ001/?ar=030&bs=030&ta=13&shikugun2=01&sc=13101&sc=13102&sc=13103&sc=13104&sc=13105&sc=13113&shikugun2=02&sc=13106&sc=13107&sc=13108&sc=13118&sc=13121&sc=13122&sc=13123&shikugun2=05&sc=13109&sc=13110&sc=13111&sc=13112&shikugun2=04&sc=13114&sc=13115&sc=13120&shikugun2=03&sc=13116&sc=13117&sc=13119&shikugun2=06&sc=13201&sc=13202&sc=13203&sc=13204&sc=13205&sc=13206&sc=13207&sc=13208&sc=13209&sc=13210&sc=13211&sc=13212&sc=13213&sc=13214&sc=13215&sc=13218&sc=13219&sc=13220&sc=13221&sc=13222&sc=13223&sc=13224&sc=13225&sc=13227&sc=13228&sc=13229&sc=13300&kb=1&kt=9999999&km=1&tb=0&tt=9999999&ekTjCd=&ekTjNm=&tj=0&kj=9 POSTの場合は検索されないと思っていますがあっていますか? もしPOSTでもインデックスされるのならURLが汚くならずに済むのでそっちの方がよいです。 こちらも有名サイトです。こちらはPOSTを使っています。 http://kodate.homes.co.jp/s/areatop/13200/ POSTを使うべきか、クエリストリングを短くする何か方法を探すか、その他にインデックスされるよい方法はないのでしょうか。

    • ベストアンサー
    • PHP
  • クエリ文字列が取得できない

    以下のようなプログラムを作りました。 test.php -------------- <HTML><BODY> <?php echo($_REQUEST["n"]); ?> </BODY></HTML> -------------- それで http://(省略)/test.php?n=5 とURLをいれて Query Stringから5を取得させて表示させたいのですが ローカルでのテスト(Apache/1.3.27)はうまくいくのですが サーバーにアップロードすると何も表示されません。 他のPHPのプログラムは動くのですが、どうもこの$_REQUEST["n"];の部分がうまくいっていないようです。 プログラムのミスか、設定のミスか、考えられる対処法を教えていただけないでしょうか? 環境 PHP 4.2.2 サーバー:レンタルサーバー(1-man.net) (phpは使えるサーバーです) Dreamweaver MX

    • ベストアンサー
    • PHP
  • 別サーバの記述だけ持ってくる方法?

    AとBのサーバがあります。 AサーバにあるPHPプログラム内で BサーバにあるPHPプログラムを実行したいです。 このとき、 Bサーバでプログラムを動かすわけではなく、 記述だけをAサーバのプログラムに持ってきて Aサーバで動いてほしいのですが、 そもそもこんなことは可能でしょうか? 例えば [AサーバのPHP]  $AAA = "あああ";  require("BサーバのPHPのURL"); [BサーバのPHP]  print "AAA=".$AAA; 通常、requireやincludeをすると  AAA= と出力されるところを  AAA=あああ と出力させたいです。 なにか良い方法ございましたらお助け願います。 もちろん、requireやincludeで記述だけ持ってこれたら、 ソースをパクリ放題になるので、できなさそうな気はします。 Bの方の拡張子を変えたらできる!とか、そんなのありますか?

    • ベストアンサー
    • PHP
  • クエリ付きURLをクエリ無しURLにリダイレクト

    お世話になります。 旧サイト・クエリ付きURLを新サイト・クエリ無しURLに301リダイレクトさせる方法が知りたいです。 旧サイト:"http://www.example.jp/index.php?option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0&lang=ja" 新サイト:"http://www.example.jp/brand/nike" 以下は、途中まで記述した設定です。 RewriteCond "%{QUERY_STRING}" "^option=com_virtuemart&page=shop.browse&manufacturer_id=4" [OR] RewriteCond "%{QUERY_STRING}" "^option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62" [OR] RewriteCond "%{QUERY_STRING}" "^option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0" [OR] RewriteCond "%{QUERY_STRING}" "^option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0&lang=ja" [OR] RewriteCond "%{QUERY_STRING}" "^option=com_virtuemart&page=shop.browse&manufacturer_id=4&Itemid=62&limitstart=0&lang=en" [OR] RewriteRule パターン http://www.example.jp/brand/nike [R=301,L] orailly「Apache クックブック」を見ながら設定をしているのですが、RewriteRule で正規表現パターンを設定するところで躓いています。何を設定したらよいのか見当がつきません。 ご教授の程、よろしくお願いします。

  • mysql_queryが動かなくて困っています

    こんにちは、Web上のphpのページを見ながら学習している者です。 早速躓いてしまっていまして、どなたか添削していただければと思います。 下のようなスクリプトを組んだのですが、接続は成功するのですが 問い合わせのほうがうまくいかず、クエリの送信に失敗しました。になります mysql_query文の各パラメーターはphpMyAdminの画面からカットアンドペーストしたもので、タイプミスや大文字小文字のミスは無いはずなのですが… どうかよろしくお願いします >><?php >>   $url = "11111.jp"; >>   $user = "+++++"; >>   $pass = "*****"; >>   $db = "dbname"; >>   // データベースへ接続("サーバ名","ユーザ名","接続用パスワード") >>   $link = mysql_connect($url,$user,$pass)or die("MySQLへの接続に失敗しました。"); >>   $sdb = mysql_select_db($db)or die("データベースの選択に失敗しました。"); >>   // 問合せ処理 >>   $query = "select 名称 from tablename where ID=1"; >>   $result = mysql_query($query)or die("クエリの送信に失敗しました。<br />SQL:".$sql);

    • ベストアンサー
    • PHP
  • 他のクエリを保持したまま、ページ番号だけを変えたい

    検索ボックスに入力されたクエリを基に検索する、search.phpを作成しました。 queに格納されているキーワードを検索して、50件ずつ表示します。 このとき search.php?que=[検索キーワード]&cat=[検索カテゴリ]&page=1 で検索結果の1ページ目、 search.php?que=[検索キーワード]&page=2 で検索結果の2ページ目が表示されます。 ページ下部には 前へ 次へ とあり、それぞれページひとつ前、ページひとつ次のURLがあるのですが、このURLはクエリによって動的に変化します。 search.php?que=aaa&cat=abc&page=4 なら前へ:search.php?que=aaa&cat=abc&page=3 、 次へ:search.php?que=aaa&cat=abc&page=5 search.php?que=bbb?page=4 なら前へ:search.php?que=bbb?page=3 、 次へ:search.php?que=bbb?page=5 このように、それ以外のクエリを保持したまま、ページ番号だけを書き換えるにはどのようにすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 【添削願】クエリ文、エラーが改善できません。

    こちらのPHPがうまく出力されません。 自分なりに書いてますが なかなか間違いを見つけられず添削お願いできると ありがたいです。 最初の4行のサーバー名はダミーです $sv = "mysql.xxx.jp"; $dbname = "bbb"; $user = "bbb"; $pass = "aaa"; $link = mysqli_connect($sv, $user, $pass,$dbname); $editpagename ="main"; $query = "SELECT * FROM $editpagename ORDER BY id DESC LIMIT 0 , 50"; $result = mysqli_query($link, $query); var_dump($result); どのようなことが考えられるでしょうか? よろしくお願い致します。

    • ベストアンサー
    • PHP