• ベストアンサー

ちょっと複雑な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 どなたか詳しい方がいらっしゃいましたら、ご教授お願い致します。

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

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

  • ベストアンサー
  • 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

  • 変数の分解

    いつもお世話になってます。本題なのですが 下のような値が入った変数($hoge)があるですが $hoge="url=http://hogehoge.com/&a=100$b=200"; GETのように扱う方法、または $urlと$aと$bに分解することは出来ないでしょうか? 回答よろしくお願いします。

    • ベストアンサー
    • PHP
  • コードをもっとスマートにする方法はありませんか?

    PHPを学び始めた者です。 現在自サイトのリンク集を動的に作成しております。 各ページのURLを読み込み特定URL文字があった場合は書き換えを行なっているのですが、数が多くなり(300件以上)コードが増えてきました。 出来るだけ管理しやすくスマートにしたいのですが何か方法ありませんか? ~略~ if(strstr($item['link'], "hoge1.")){ $blog = "<a href=\"http://hoge1.hogehoge.com/\">hoge1さん</a>"; }elseif(strstr($item['link'], "hoge2.")){ $blog = "<a href=\"http://hoge2.test.com/\">hoge2さん</a>"; }elseif(strstr($item['link'], "test3.")){ $blog = "<a href=\"http://test3.hogehoge.com/\">test3さん</a>"; }elseif(strstr($item['link'], "/")){ $blog = "<a href=\"http://#\">未登録</a>"; }; ~略~

    • 締切済み
    • PHP
  • $_GETで取得する「&x=○&y=○」って何ですか?

    PHPでhtmlフォームから$_GETを取得しています。 name="hogehoge"、value="200712"としています。200712は2007年12月のことです。 そうすると、送信内容がURLに表示されますので、下記のようになると思います。  http://www.hoge.com/test.php?hogehoge=200712 ですが、最近このURLの後に「&x=101&y=13」というような文字列が付いていることに気づきました。  http://www.hoge.com/test.php?hogehoge=200712&x=101&y=13 この「&x=101&y=13」とは何の意味なのでしょうか?リクエストの度にこの二つの数値が変わります。 お手数ですがおわかりの方、よろしくお願いします。

    • ベストアンサー
    • PHP
  • 静的URL変換について

    現在,phpでウェブサイトを作成しているのですが、 サイト内検索をしたときのURLを静的化できないか、考えております 例)getで送った際のURL hoge.com/search.php?keyword=hoge 修正後 hoge.com/kewyword_hoge.php そして、その際にやりたいことは、hoge.com/kewyword_hoge.phpをインデックスさせ このURLのページにアクセスしてきたときにhoge.com/search.php?keyword=hogeを 実行するようにしたいのですが、これって可能でしょうか? 静的URL変換自体は問題ないのですが、 hoge.com/kewyword_hoge.phpにアクセスしてもhoge.com/search.php?keyword=hoge を実行してくれず困っております。 恐れ入りますが、解決策をご教授いただけませんでしょうか? 何卒宜しくお願いします。 また、私のやりたいことは以下のサイトで参考になります。 ■インデックスされているURL(google) http://j-sen.jp/kanto/keyword_%E3%81%86%E3%81%A9%E3%82%93.htm ■サイト内検索のURL http://j-sen.jp/search/?area=kanto&nmin%5Bname%5D=&nmin%5Btime%5D=&nmin%5Bn%5D=&wage=&freeword=%E3%81%86%E3%81%A9%E3%82%93&day=&hour=&feature%5B%5D=&feature%5B%5D=&medical=1&except_medical=0&x=82&y=22 どちらも検索結果は同じですが、サイト内検索のURLを静的化し、 google先生にインデックスさせています。 お手数ですが、改めて解決策のご教授お願い申し上げます。

    • 締切済み
    • PHP
  • URLのパラメータを取得しリンクに渡すには?

    Javascriptで、URLのパラメータを取得し、リンクにパラメータを渡したいです。 例えば、現在のURLが、 http://www.hogehoge.com/hoge.php?page=hoge1だとします。 そのページに、様々なリンクがあるとします。 <リンク例> http://www.hogehoge.com/moge/moge.php http://www.hogehoge.com/boge/boge.php http://www.yahoo.co.jp/auctionxx.html このうち、/moge/以下のページへのリンクにのみ、自動で現在のURLのパラメータを渡したリンクにしたいです。 つまり、 http://www.hogehoge.com/moge/moge.php ↓ http://www.hogehoge.com/moge/moge.php?page=hoge1 というリンクにしたいです。 当然現在のURLにパラメータが存在しない場合は、そのままのリンクになります。 また、他のディレクトリや他のドメインのサイトにはパラメータを渡さず、変更せずにそのままのURLのリンクにしたいです。 <リンク例> http://www.hogehoge.com/moge/moge.php ○変更 http://www.hogehoge.com/boge/boge.php ×変更なし http://www.yahoo.co.jp/auctionxx.html ×変更なし よろしくお願いします。

  • クエリのあるURLを短縮して301リダイレクトしたいのですが。

    何度やってもダメだったのでぜひ教えてください。 http://hoge.com/index.cgi?id=2&mode=individual&no=1&eid=973 というアドレスから http://hoge.com/index.cgi?mode=individual&eid=973 に301リダイレクトするにはどう.htaccessに記せばよいのでしょうか? RedirectPermanent /index.cgi?id=2&mode=individual&no=1&eid=973 http://m.wayohoo.com/index.cgi?mode=individual&eid=973 だと飛びませんでした。どう書けば飛んでくれるのでしょうか?ぜひご教示お願いいたしますm(_ _)m

    • 締切済み
    • CGI
  • サイトリニューアルに伴うURL変更について

    SEOを意識して今まで運営してきたサイトがあるのですが、わけあってサイトをリニューアルすることになりました。 その際、ドメインは変わらないのですが、以下のようにSEO対策していたページのURLを変更しなくてはなりません。 旧URLから新URLへSEOのパワーを引継ぐための施策で考えられる方法をできるだけ多く教えていただけませんでしょうか? ※ちなみにディレクトリ名だけ変わる場合と、.htmlに対してSEOをしていたものをディレクトリで終わるURLにしたものと2パターンについて教えてください。 よろしくお願いいたします。 (1)ディレクトリ名のみ変更 旧URL⇒http://hogehoge.com/hoge1/hoge2/ 新URL⇒http://hogehoge.com/hoge1/aa_hoge2/ (2).htmlのページ⇒ディレクトリで終わるURL 旧URL⇒http://hogehoge.com/hoge1/hoge2/hoge3.html 新URL⇒http://hogehoge.com/hoge1/aa_hoge2/hoge3/

    • ベストアンサー
    • SEO
  • PHPでの値の受け渡し

    PHPで hogehoge.com/index.php?mode=aaa とするとき hogehoge.com/?mode=aaa ではアクセス可能なのですが これを hogehoge.com/aaa もしくは hogehoge.com/mode/aaa のようにアクセスするには どのようにすればよいのでしょうか? PHPだけでは出来ないかもしれないので他に方法がありましたら教えて頂けないでしょうか? 宜しくお願い致します。

    • ベストアンサー
    • PHP
  • PHPで動的に生成されるCSVをサーバーに保存

    業務処理を自動化するためにPHPで動的に生成されるCSVファイルを、WEBサーバーに保存したいと思っています。 wgetコマンドを使って保存しようと思っていますが、リンクにGETパラメータ?(http://hogehoge.com/hoge.php?hoge=1&hoge=2)が設定されているためかcsvが生成さずPHPページ(hoge.php)が保存されてしまいます。 実行したwgetコマンド /usr/local/bin/wget /home/useraccount/www/hoghog/hog.csv 'http://hogehoge.com/hoge.php?hoge=1&hoge=2' -O - また、phpファイルを生成し、 <?php $file = 'http://hogehoge.com/hoge.php?hoge=1&hoge=2'; $newfile = 'test.csv'; if (!copy($file, $newfile)) { echo "failed to copy $file...\n"; } ?> と上記のようにやっても同じ結果でした。 ブラウザ上のURLバーでhttp://hogehoge.com/hoge.php?hoge=1&hoge=2とするとCSVファイルの保存画面が出てくるページなのですが、何か良い方法はありませんでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPで<a>タグ内からURLと文字を抜き出したい

    PHP4.3で $html_tag = '<a href="http://www.hogehoge.com/hogehoge/hoge/sample.html" class="hogehoge" title="hogehoge">りんく先名称</a>'; というような変数から 「http://www.hogehoge.com/hogehoge/hoge/sample.html」 のURLと 「りんく先名称」という<a>で囲まれた文字列を抜き出したいのです。 preg_matchを使っていろいろやってみたのですが、どうもうまくいきません。というか、正規表現がどのように書いていいのかわからないのですが・・・ そもそもpreg_matchを使わずとも簡単な方法があるのでしょうか? 大変恐れ入りますが、ご教授いただけませんでしょうか?

    • ベストアンサー
    • PHP