PHPでのGETデータの受けとり
更新日 : 2019年07月03日
HTTPにはHTTPメソッドという、「どのように」データを取得するかを決めるメソッドがありました。HTTPのGETメソッドによって、URLに含まれた形でサーバーにデータを送ることができます。このサーバーへ送られてきたデータをPHPを利用して扱ってみましょう。
PHPでのGETパラメータの受け取り
PHPにてGETメソッドで送られてきたデータ(URLに含まれるクエリストリング)を処理してみましょう。以下のようなURLでアクセスが来た場合を想定します。
http://localhost:8888/get-method.php?no=1
クエリストリングはno=1
の部分です。これをPHPで扱ってみましょう。
<?php
if(isset($_GET["no"])) {
$no = $_GET["no"];
echo $no . "番にアクセスが来ました。";
} else {
echo "番号が指定されていません。";
}
3行目・4行目にある$_GET["no"]
これがGETメソッドのパラメータを取得するPHPの特別な変数です。このように事前に用意された特別なスーパーグローバル変数というものに自動で格納されます。
$_GET[キー名]
とすることで、GETメソッドのパラメータを取得できます。キー名にはクエリストリングに含まれるキーの名前を入れます。
コードの解説
if(isset($_GET["no"]))
GETのパラメータがURLにない場合でも、この$_GET
という変数は空の配列として存在しているため、no
というキー名でGETメソッドのパラメータが含まれているかをチェックしています。
あとは通常通り変数に代入したり、echoで表示しているだけですね。
日本語などのマルチバイト文字のGETパラメータ
先程は簡単な番号をURLに含めていたため、単純に表示を行いました。
次に日本語を含めたパラメータをURLに入れてみましょう。
URLにマルチバイト文字を含めることはできないため、普通に日本語を入れることはできません。そこでURLエンコードという処理を行います。近年のブラウザではURLエンコードの必要がない場合がありますが、対応していないブラウザのためにはやっておきましょう。
これはマルチバイト文字をURLに含めることができるように変換するための処理です。逆に変換された文字はデコードと呼ばれるエンコードと反対の処理を行うことで元のマルチバイト文字に戻します。
実際にマルチバイト文字に変換したURLでのアクセスと、デコードを見てみましょう。
URLエンコードを行ったクエリストリングの作成
以下のコードで見てみましょう。
<?php
$data = "日本の歴史";
$url_encode_data = rawurlencode($data);
echo "元のデータは「{$data}」<br>";
echo "URLエンコードしたデータは「{$url_encode_data}」<br>";
//ここからget-method-2.phpにこのデータを送ってみる
echo "<a href=\"/PHP/get-method-2.php?search={$url_encode_data}\">データ送信!!</a>";
変数内の文字列は中括弧{}で囲うことでダブルクオーテーションの中でも利用できます。
これを表示すると以下のようになります。

URLエンコードすることにより、マルチバイト文字がなくなっているのがわかります。
HTMLのaタグでリンクも作成しました。作成したget-method-2.php
は以下のように書いてみます。
<?php
$search_data;
if(isset($_GET["search"])) {
$search_data = $_GET["search"];
} else {
$search_data = "";
}
echo "検索するワードは「{$search_data}」<br>";
実はPHPの$_GET
は、URLエンコードされたデータが送られてくるのがわかっているため、URLデコードまでしてくれています。そのため格納した$search_data
には日本語がそのまま入っています。
まとめ
GETパラメータについてPHPでのパラメータの受け取り方法について学びました。
日本語を使う場合のURLエンコードについては改めて記事にするかと思います。
今回は$_GET
でのGETパラメータの受け取りについて理解していただければ問題ありません。
タグ
-
前の記事
HTML内へのPHPコードの埋め込み
-
次の記事
PHPでのPOSTデータの受け取り