• 締切済み

$_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番目の「?」にはこういう場合に反応するということがわかれば対処できるのですが。 どうぞよろしくお願いいたします。

みんなの回答

回答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