• ベストアンサー

headerで飛ばすときにURLエンコードを有効に

headerでほかのサイトに飛ばすとき、 header("Location: http://localhost/nani/success.php?tour=$_GET[tour]"); こんな感じでクエリを飛ばしているのですが、URLエンコーディングをする方法がわかりません。 ほかの変数($data)に入れるまえにurlencode($_GET[tour])として入れ替えて、 ?tour=$_GET[tour]の部分を?tour=$dataとしたのですができません。 ご存知の方いらっしゃいましたら教えていただけませんでしょうか?

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

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

送り側と受け取り側のエンコードが違う場合はやり方は4つあります (1)送り側は受け取り側で受け取れるエンコードを事前に理解し、 送る際に仕様にあわせたデータをおくる (2)送り側で明示的にエンコード方式を受け取り側に伝えてやり 受け取り側がそれをみて判断する (3)受け取り側が、送られてきたデータのエンコードを想像して 想定と違う場合は自動的に変換してやる (4)受け取り側は、送られてくるデータのエンコードを特定のものと信じて それ以外の場合は、あきらめる。 今回の質問者さんの例ですと(4)だったので、しかたなく(1)にした ということですね。 スケーラビリティを考えれば、通常(2)を採用する場合が多いようです。 (3)は不正確な処理なので賢明とはいえません //send.php <?PHP $tour=urlencode($_GET["tour"]); $e=urlencode($_GET["e"]); if($tour){ header("Location: reach.php?tour=".$tour."&e=".$e); exit(); } ?> <html> <body> <a href="?tour=%82%A0%82%A2%82%A4&e=sjis">SJIS</a><br> <a href="?tour=%A4%A2%A4%A4%A4%A6&e=euc">EUC</a><br> <a href="?tour=%E3%81%82%E3%81%84%E3%81%86&e=utf">UTF</a><br> </body> </html> //reach.php → SHIFT JISを前提 <meta http-equiv="Content-Type" content="text/html; charset=Shift-JIS"> <html> <body> <?PHP mb_internal_encoding("SJIS"); $tour=$_GET["tour"]; switch($_GET["e"]){ case "euc": $tour=mb_convert_encoding($tour,"SJIS","EUC"); break; case "utf": $tour=mb_convert_encoding($tour,"SJIS","UTF8"); break; case "sjis": case "": break; default: $tour=""; } print $tour; ?> </body> </html>

buc6t
質問者

お礼

回答ありがとうございます。 コードまで用意していただきありがとうございます。 コードはプリントアウトアウトして勉強させていただきました。 しっかり記憶しておきます。 読み返すたびに質問の仕方が悪かったと感じています。 私が組んだプログラムはクエリの受け手も送り手も utf-8で組んでいたので、たぶん受けて側はutf-8とわかるだろうと思っていたのですがそうではないのでしょうね。 勉強になりました。ありがとうございます。

その他の回答 (1)

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

なにがどうできないかわからないのでなんとも言えませんが・・・ 普通に飛ぶような気がしますが? <?PHP header("Location: ttp://localhost/nani/success.php?tour=".urlencode($_GET["tour"]).""); ?>

buc6t
質問者

お礼

回答ありがとうございます。 >なにがどうできないかわからないのでなんとも言えませんが・・ 関数headerのところで飛ばしたはずのクエリを読み取れなかったということです。 自己解決したのですが、utf-8だったから飛ばないと思っています。 shift_jisにしたらできました。 もしutf-8でもできるなら、できたということを教えていただきたいです。

関連するQ&A