
headerでほかのサイトに飛ばすとき、
header("Location: http://localhost/nani/success.php?tour=$_GET[tour]");
こんな感じでクエリを飛ばしているのですが、URLエンコーディングをする方法がわかりません。
ほかの変数($data)に入れるまえにurlencode($_GET[tour])として入れ替えて、
?tour=$_GET[tour]の部分を?tour=$dataとしたのですができません。
ご存知の方いらっしゃいましたら教えていただけませんでしょうか?
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>
回答ありがとうございます。
コードまで用意していただきありがとうございます。
コードはプリントアウトアウトして勉強させていただきました。
しっかり記憶しておきます。
読み返すたびに質問の仕方が悪かったと感じています。
私が組んだプログラムはクエリの受け手も送り手も
utf-8で組んでいたので、たぶん受けて側はutf-8とわかるだろうと思っていたのですがそうではないのでしょうね。
勉強になりました。ありがとうございます。
No.1
- 回答日時:
なにがどうできないかわからないのでなんとも言えませんが・・・
普通に飛ぶような気がしますが?
<?PHP
header("Location: ttp://localhost/nani/success.php?tour=".urlencode($_GET["tour"])."");
?>
回答ありがとうございます。
>なにがどうできないかわからないのでなんとも言えませんが・・
関数headerのところで飛ばしたはずのクエリを読み取れなかったということです。
自己解決したのですが、utf-8だったから飛ばないと思っています。
shift_jisにしたらできました。
もしutf-8でもできるなら、できたということを教えていただきたいです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付と年月日を選択するコード...
-
PHPのif文でその処理を途中で抜...
-
3の倍数の和
-
リンク先を隠す方法はないでし...
-
Visual C++ 2005 Express Editi...
-
FTPコマンドでディレクトリごと...
-
PHP8を使うと、大量のWarningが...
-
PHPを使ってのサーバ上ファイル...
-
PythonのTkinter詳しい方へ。画...
-
makefile でファイルをコピーす...
-
HYのAM11:00のラップの部分の歌...
-
「include()」関数の使い方につ...
-
onedrive にexcelファイルをア...
-
Subversionのリポジトリの削除
-
BASP21のFTPで日本語ファイル名...
-
tex についての質問です。 割り...
-
URLが.PHPってどういう...
-
ファイルアップロードに関して...
-
ヒアドキュメントの中で演算子...
-
index.phpって何ですか? 具体...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付と年月日を選択するコード...
-
php エラー
-
XMLパースエラー回避方法
-
一つのphpファイルでframeset
-
文字化けについて
-
phpの画面表示が真っ白です
-
ローカル環境で動くのに本番環...
-
PHP で複数行の HTML を他の PH...
-
さくらインターネットレンタル...
-
エラー Warning: Cannot modif...
-
PHPでのアンケート設置について
-
XAMPP1.7.1上でPHPを実行すると...
-
どうしたら確認ができますか!?
-
headerで飛ばすときにURLエ...
-
複数の文字列をファイルに書き...
-
PHP(smarty)についての質問(文...
-
画像表示の拡大表示について。
-
PHPで地域名のみ変更
-
正しく表示されません!?
-
<form action="bbs.php" method...
おすすめ情報