TTPにはHTTPメソッドという、「どのように」データを取得するかを決めるメソッドがありました。HTTPのGETメソッドによって、URLに含まれた形でサーバーにデータを送ることができます。このサーバーへ送られてきたデータをPHPを利用して扱ってみましょう。

PHPでのGETデータの受けとり

1年以内に更新されました。
更新日 : 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パラメータの受け取りについて理解していただければ問題ありません。


タグ