PHP入門 リクエスト情報 クエリ情報($_GET)
クエリ情報とは、URLの末尾「~?」以降に「キー名=値」のセットで付加される簡単な情報です。Yahoo、Googleのような検索エンジンでサイト検索したときに、ブラウザのアドレス欄に次のようなURLが表示されます。
https://shopping.yahoo.co.jp/promotion/campaign/lypsunday/?sc_e=yotreco_news_l_lypsunday_
nopre_201201_m2cnew
?以降がクエリ情報です。パス本体とクエリ情報は「?」で区切られ、複数のキーがある場合には「&」で連結されています。クエリ情報は、ポストデータと並んで、クライアントからサーバーに対して情報を渡すための基本的な方法の1つです。URLに文字列として直接指定する他、<form>タグでGETオプションを指定した場合にも、フォームに入力されたデータはクエリ情報としてサーバーに送信されます。
クエリ情報を確認する
クエリ情報として送信する例になります。クエリ情報を取得する場合は、スーパーグローバル変数の$_GETを使用します。
sample1.php
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>PHPサンプル</title>
</head>
<body>
<form method="GET" action="sample2.php">
<label for="name">名前:</label>
<input id="name" type="text" name="name" size="15" />
<input type="submit" value="送信" />
</form>
</body>
</html>
sample2.php
<?php require_once './Encode.php';?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>クエリ情報</title>
</head>
<body>
選択されたのは、<?=e($_GET['name']) ?>さん
</body>
</html>
ハイパーリンク経由で値を受け渡しする
クエリ情報はフォーム経由で送信する他にURLの末尾に直接追加することもできます。ただし、クエリ情報には直接含めれない文字があります。たとえば、キーの区切りを表す「&」をはじめ、ハッシュを表す「#」、空白、マルチバイト文字などは、クエリ情報に含めることができません。これらがクエリ情報に含まれる可能性がある場合は、あらかじめ「%xx」のような文字列に変換する必要があります。この変換をURLエンコードと言います。
下記のサンプルでは、「&」や「%」といった記号を正しく受け渡しできていることをが確認できます。
sample1.php
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>PHPサンプル</title>
</head>
<body>
<a href="sample2.php?keyword=<?=urlencode('クエリ情報(&%)') ?>">結果を確認</a>
</body>
</html>
sample2.php
<?php require_once './Encode.php';?>
<!DOCTYPE html>
<head>
<meta charset="UTF-8" />
<title>クエリ情報</title>
</head>
<body>
<?=e($_GET['keyword']) ?>
</body>
</html>
構文:urlencode関数
urlencode(string $str) : string
$str | エンコード対象の文字列 |
ポストデータとクエリ情報
PHPでは、ポストデータとクエリ情報のいずれもスーパーグローバル変数でアクセスできます。また、クエリ情報はURLの一部としてデータを送信しているのに対して、ポストデータは(URLとは別に)リクエストボディと呼ばれるブロックに載せて送信しています。この違いから、ポストデータ/クエリ情報には次の制限があります。
1、クエリ情報で送信できるデータサイズには制限がある
近年では廃止となったInternetExplorerでは、URLに使用できる最大文字数は2083文字です。URLの一部として送信されるクエリ情報は、パス本体との合計サイズでこの制限を超えることはできません。Chromeなどのブラウザではこのような制限はありません。また、SEO目的で、サイトマップとよばれるサイト情報を設置することもあります。サイトマップのURLは、2048文字以内とされていますので、クエリ情報を含めたURLの長さは、2000文字程度を最大にするのがよいでしょう。
2、クエリ情報ではデータがアドレス欄に表示されてしまう
クエリ情報は、ブラウザのアドレス欄にデータがそのまま露出してしまいます。パスワード情報などの、セキュリティに関連する情報はクエリ情報を介して受け渡しはよくありません。
3、POST経由で得た結果をブックマークすることはできない
クエリ情報はデータをURLに付加する形で表現するので、結果をブックマークできます。ポストデータでは、データはリクエストボディとして送信されるため、ブックマークすることはできません。