URL 引数の設定

ページ間のデータ受け渡し方法は、いくつかあります。ここでは、URL に引数をつけ、そのデータを PHP で受け取る方法を紹介します。

URL に ? をつける

ページ間データの受け渡しは、URL の引数( ? 以降)を求めることにより実現することが出来ます。次の例の場合、http://**.com/pathinfo1.php は実在するファイル名とします。すると、'?' に続くデータは、HTTP GET メソッドで引き渡されることになります。
'&' は、データの区切りです。データが1つしかない場合は、'&' は記述する必要はありません。

http://**.com/pathinfo1.php?a=dat1&b=dat2&c=dat3

PHP 側 pathinfo1.php では、引数を、$_GET で受け取ることができます。$_GET は配列で、この場合の内容は、Array ( [a] => dat1 [b] => dat2 [c] => dat3) となります。したがって、次のように記述すれば、$a="dat1"、$b="dat2"、$c="dat3" と取得することができます。

$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];

PATH_INFO を利用する

Apache の設定で AcceptPathInfo が On か Default になっていれば、利用できます。off の場合 .htaccess ファイルで設定してください。
実際のファイル名 (もしくは存在するディレクトリの 存在しないファイル) の後に続くパス名情報があるリクエストを受け付けてくれます。続きのパス名情報はスクリプトには PATH_INFO 環境変数として利用可能になります。
次の例の場合、http://**.com/pathinfo2.php は実在するファイル名とします。すると、これに続くデータが、PATH_INFO 環境変数に入ります。 Apache の設定が PHP を拡張子なしで利用できるようになっていれば、2行目のように、ファイル拡張子 .php を省略できます。

http://**.com/pathinfo2.php/dat1/dat2/dat3/
http://**.com/pathinfo2/dat1/dat2/dat3/

PHP 側 pathinfo2.php では、引数を $_SERVER['PATH_INFO'] で受け取ります。'PATH_INFO' には、'/dat1/dat2/dat3/' が入ります。'PATH_INFO' のデータの最初の文字は '/' ですので、'/' で explode した場合の最初のデータは null になりますので、list に受け取る変数を設定していません。この例では、$a="dat1"、$b="dat2"、$c="dat3" となります。

list(,$a, $b, $c) = explode('/', $_SERVER['PATH_INFO']);

mod_rewrite を利用する

一般的に、'?' のついた URL は、サーチエンジンから嫌われると言われています。mod_rewrite をつかうと、この '?'を隠し、引数を含みながらも実際あるページへアクセスするのと同じような記述ができます。
サーチエンジンも、実際にこのページがあると認識しますので、SEO 対策も問題なくなります。

http://**.com/dat1/dat2/dat3.html

この例では、.htaccess ファイルで、RewriteRule を次のように記述し、pathinfo1.php ファイルと同じ http://**.com/ のディレクトリに置きます。すると、上記 URL は、自動的に、http://**.com/pathinfo1.php?a=dat1&b=dat2&c=dat3 と変換され、pathinfo1.php を実行します。
mod_rewrite については、URL 書き換えで詳しく説明します。

RewriteRule ([^\/]+)/([^\/]+)/([^\/]+)\.html$ pathinfo1.php?a=$1&b=$2&c=$3

引数で使える文字

引数は、URL の一部になります。したがって、URL で使用可能な文字(英数字と - _ . )しか使用できません。% & # ? ! などは、利用方法が定めれれている文字ですので、自由に使うことはできません。もちろん、日本語は使用できません。
でも、PHP には、URL エンコード関数があります。urlencode () は、- _ . を除くすべての非英数文字を % 記号 (%)に続く二桁の数字で置き換え、 空白は + 記号(+)にエンコードしてくれます。
日本語や、特殊文字を引数として渡したい場合は、URL エンコードします。たとえば、urlencode ('テスト') は、エンコードすると '%E3%83%86%E3%82%B9%E3%83%88' になります。PHP で受け取る場合は、すでにでコードされた 'テスト' という文字で受け取ることができます。

PR amazon

author

サイト管理人:パワーデジット
管理人への連絡フォーム

スポンサード リンク

このページは 

トップページ > PHP > URL 引数