PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPの$_GETとは?URLパラメータ(クエリ文字列)の受け取り方とhtmlspecialcharsによる安全な出力

$_GETとは

$_GETは、HTTPリクエストのURL末尾に付加されたクエリ文字列(query string)経由で現在のスクリプトへ渡された変数を格納する連想配列です。PHPにおける主要なスーパーグローバル変数の一つであり、関数やグローバルスコープ内でもそのままアクセスできます。

注意点として、$_GETにはGETメソッドのリクエストだけでなく、クエリ文字列を含むすべての種類のリクエスト(POST送信時など)によっても値が設定されます。

また、かつて同じ情報を持っていた$HTTP_GET_VARSという変数も存在しましたが、こちらはすでに非推奨となっており、PHP 7では削除されているため使用できません。

クエリ文字列の構造

デフォルトでは、ブラウザはHTTP GETメソッドを使ってサーバー上のURLへのリクエストを送信します。URLに付加されるクエリ文字列は、以下のようにkey=value形式のペアを&記号で連結した形になります。

https://localhost/testscript.php?name=xyz&age=20

この場合、$_GET連想配列には「name」というキーに「xyz」、「age」というキーに「20」が格納されます。

$_GETの基本的な使い方

ブラウザで https://localhost/testscript.php?name=xyz&age=20 というURLにアクセスした場合、次のコードでパラメータを取得して表示できます。

サンプルコード

<?php
echo "名前 : " . $_GET["name"] . "<br>";
echo "年齢 : " . $_GET["age"];
?>

出力結果

名前 : xyz
年齢 : 20

htmlspecialchars()でHTMLエンティティに変換する

$_GETで受け取った値をそのまま画面に出力すると、悪意あるスクリプトが埋め込まれた場合にXSS(クロスサイトスクリプティング)攻撃を受ける危険があります。そこで、htmlspecialchars()関数を使い、特殊文字をHTMLエンティティに変換してから出力するのが安全です。

htmlspecialchars()関数により、以下の文字が置き換えられます。

元の文字置き換え後
< (小なり)&lt;
' (シングルクォート)&#039; または &apos;
" (ダブルクォート)&quot;
& (アンパサンド)&amp;
> (大なり)&gt;

先ほどと同様に、ブラウザで https://localhost/testscript.php?name=xyz&age=20 というURLにアクセスしたケースで確認してみましょう。

サンプルコード

<?php
echo "名前 : " . htmlspecialchars($_GET["name"]) . "<br>";
echo "年齢 : " . htmlspecialchars($_GET["age"]) . "<br>";
?>

出力結果

名前 : xyz
年齢 : 20

まとめ

  • $_GETはURLのクエリ文字列から渡された値を保持するスーパーグローバルな連想配列である。
  • クエリ文字列は「key=value」ペアを「&」で連結した形式で指定する。
  • $HTTP_GET_VARSは非推奨のため使わず、必ず$_GETを使用する。
  • 出力時はhtmlspecialchars()関数で特殊文字をエスケープし、XSS対策を行うのが基本である。
  1. PHPのzip_entry_name()関数とは?使い方とサンプルコードを解説

    PHPのzip_entry_name()関数は、ZIPアーカイブ内に格納されているファイル(エントリ)の名前を取得するための関数です。この関数を使用することで、ZIPファイルの中にどのようなファイルが含まれているのかを簡単に確認できます。構文zip_entry_name(zip_entry)パラメータzip_entry − zip_open()で開いたZIPリソースに対してzip_read()で読み込んだ、ZIPディレクトリエントリを指定します。戻り値zip_entry_name()関数は、指定したZIPエントリ(アーカイブ内のファイル)の名前を文字列として返します。以下に具体例を示します。「

  2. Pythonのデフォルト引数(デフォルトパラメータ)とは?基本の使い方をサンプルコードで解説

    Pythonにおけるデフォルト引数(デフォルトパラメータ)とは、関数を呼び出す際にその引数へ値が渡されなかった場合に、自動的に初期値が適用される引数のことです。デフォルト引数を使うことで、同じ関数をさまざまなパターンで柔軟に呼び出せるようになります。 次の例では、age 引数にデフォルト値 35 を設定しています。呼び出し時に年齢が指定されなかった場合は、このデフォルト値が出力されます。 サンプルコード #!/usr/bin/python # 関数の定義 def printinfo(name, age = 35): この関数は、渡された情報を出力します print(Name:,