• ベストアンサー

ちょっと複雑なURL分解について

http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/ (表示上の問題でURLを途中で改行しています) 上記のようなURLを取得($_GET)した場合に、URLを分解して下記の値を得るスクリプトを作成しています。 $mode値:link $id値:3 $url値:http://hogehoge.com/ これだけであれば特に悩む必要はないのですが、問題は$url値に以下のようなデータが与えられた場合です。 http://hoge.com/test.php?mode=link&id=3& url=http://hogehoge.com/index.php?mode=abc&id=123 (表示上の問題でURLを途中で改行しています) このようなURLを取得($_GET)した場合に、以下の値を得るにはどう処理すれば良いのでしょうか。 $mode値:link $id値:3 $url値:http://hogehoge.com/index.php?mode=abc&id=123 どなたか詳しい方がいらっしゃいましたら、ご教授お願い致します。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

受け取る方は何も処理する必要はありません 送信する方が適切にURLエンコードしなくてはいけません。 $url = "http://example.com/index.php?mode=abc&id=123"; という文字列をURLで送る場合には <a href="http://example.net/test.php?mode=link&id=3&url=<?php echo urlencode($url); ?>">リンク</a> のようにします。

参考URL:
http://jp.php.net/urlencode
hide1978
質問者

お礼

ご回答ありがとうございます。 再度、自分の書いたスクリプトを確認したところ、送信側で正しくエンコードしていました。不思議に思って$urlをechoで出力してみると 正しい値が得られていることが分かりました。 どうやら問題は別の部分にあるようです。まずはデバッグの基本(値を表示してみる)をやっていなかったことを反省したいと思います。 ご教授ありがとうございました。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

一部文字はURでは特別な意味をもつためパラメータわたしするときは 使えません。GETするなら以下のように置換してやる必要があるでしょう。 「:」→「%3A」 「/」→「%2F」 「?」→「%3F」 「=」→「%3D」 「&」→「%26」 まとめるとこんな感じです。 http://hoge.com/test.php?mode=link&id=3&url=http%3A%2F%2Fhogehoge.com%2Findex.php%3Fmode%3Dabc%26id%3D123

hide1978
質問者

お礼

ご回答ありがとうございます。 再度、自分の書いたスクリプトを確認したところ、送信側で正しくエンコードしていました。不思議に思って$urlをechoで出力してみると、正しい値が得られていることが分かりました。 勝手に「url部分に?や&があるから正しく動かないんだ」と思い込んでいましたが、どうやら問題は別の部分にあるようです。 もう一度、自分の書いたスクリプトを確認してみたいと思います。ご教授ありがとうございました。

回答No.2

多分link値などが、上書きされてしまうのだと思うのですが、 urlの値を分けてPOSTやSESSIONで渡す、 もしくは、$_SERVER['REQUEST_URI']で、現在のアドレスを取得して explodeで分解していけば、取得出来ると思います。

hide1978
質問者

お礼

ご回答ありがとうございます。 私もlink値等が正しく取得できていないのだろうと考えていたのですが、取得した値をechoで出力してみたところ正しい値が得られていることが分かりました。 phpは私が想像していた以上に賢いようです。(^^; どうやら問題は別の部分にあるようなので、もう一度、自分の書いたスクリプトを確認してみます。 ご教授ありがとうございました。

関連するQ&A