PHPでパラメーターを取得する方法について

採用はこちら

PHPで「パラメーターを取得する」とは、URLやフォーム、APIリクエストなどから送られてきた値をPHP側で受け取ることを指します。

WebサイトやWebアプリケーションでは、検索キーワード、ページ番号、商品ID、問い合わせフォームの入力内容など、さまざまな値をPHPで受け取って処理します。

PHPでパラメーターを取得する際によく使うのは、次のようなスーパーグローバル変数です。

$_GET
$_POST
$_REQUEST
$_SERVER

ただし、実務では基本的に $_GET$_POST を明確に使い分ける ことが大切です。

目次

GETパラメーターを取得する方法

GETパラメーターとは

GETパラメーターとは、URLの ? 以降に付いている値のことです。

たとえば、次のようなURLがあるとします。

https://example.com/search.php?keyword=php&page=2

このURLでは、以下の2つのGETパラメーターが送られています。

keyword=php
page=2

PHPでは、これらの値を $_GET で取得できます。

$keyword = $_GET['keyword'];
$page = $_GET['page'];

echo $keyword; // php
echo $page;    // 2

ただし、この書き方には注意が必要です。

もしURLに keywordpage が存在しない場合、次のような警告が出る可能性があります。

Undefined array key "keyword"

そのため、実務では次のように書くのが一般的です。

$keyword = $_GET['keyword'] ?? '';
$page = $_GET['page'] ?? 1;

?? は null合体演算子です。

$keyword = $_GET['keyword'] ?? '';

これは、$_GET['keyword'] が存在すればその値を使い、存在しなければ空文字 '' を使う、という意味です。

GETパラメーターを取得する基本例

検索フォームを例にすると、次のように書けます。

<?php
$keyword = $_GET['keyword'] ?? '';
?>

<form method="get" action="">
    <input type="text" name="keyword" value="<?php echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8'); ?>">
    <button type="submit">検索</button>
</form>

<p>検索キーワード:<?php echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8'); ?></p>

フォームで method="get" を指定すると、入力された値がURLに付きます。

たとえば、検索フォームに PHP入門 と入力して送信すると、URLは次のようになります。

search.php?keyword=PHP%E5%85%A5%E9%96%80

PHP側では、次のように取得できます。

$keyword = $_GET['keyword'] ?? '';

POSTパラメーターを取得する方法

POSTパラメーターとは

POSTパラメーターとは、主にフォーム送信などで使われる値です。

GETとは異なり、送信された値はURLには表示されません。

問い合わせフォーム、ログインフォーム、会員登録フォームなどでは、POSTがよく使われます。

<form method="post" action="confirm.php">
    <input type="text" name="username">
    <input type="email" name="email">
    <button type="submit">送信</button>
</form>

このフォームから送信された値は、PHP側で $_POST を使って取得できます。

$username = $_POST['username'] ?? '';
$email = $_POST['email'] ?? '';

echo $username;
echo $email;

GETと同じように、POSTでも値が存在しない可能性を考えて ?? を使うと安全です。

POSTパラメーターを取得する基本例

問い合わせフォームの確認画面を例にします。

<?php
function h($value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$name = trim($_POST['name'] ?? '');
$email = trim($_POST['email'] ?? '');
$message = trim($_POST['message'] ?? '');

$errors = [];

if ($name === '') {
    $errors[] = '名前を入力してください。';
}

if ($email === '') {
    $errors[] = 'メールアドレスを入力してください。';
} elseif (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errors[] = 'メールアドレスの形式が正しくありません。';
}

if ($message === '') {
    $errors[] = 'お問い合わせ内容を入力してください。';
}

if (!empty($errors)) {
    foreach ($errors as $error) {
        echo '<p>' . h($error) . '</p>';
    }
    exit;
}
?>

<p>名前:<?php echo h($name); ?></p>
<p>メールアドレス:<?php echo h($email); ?></p>
<p>お問い合わせ内容:</p>
<p><?php echo nl2br(h($message)); ?></p>

POSTで送られた値は、そのまま使うのではなく、必要に応じて未入力チェックや形式チェックを行います。

また、HTMLに出力するときは htmlspecialchars() でエスケープすることが重要です。

GETとPOSTの違い

GETは検索や絞り込みに使う

GETは、主に検索、絞り込み、ページ番号、並び替えなどに使われます。

たとえば、商品一覧ページで次のようなURLを使うケースです。

products.php?category=bag&sort=price&page=2

このような値は、ページの表示内容を変えるための条件です。

PHPでは次のように取得できます。

$category = $_GET['category'] ?? '';
$sort = $_GET['sort'] ?? 'new';
$page = max(1, (int)($_GET['page'] ?? 1));

GETはURLに値が表示されるため、検索結果ページを共有したり、ブックマークしたりしやすいというメリットがあります。

POSTは登録や更新に使う

POSTは、主にデータの登録、更新、削除、ログイン、問い合わせ送信などに使われます。

たとえば、次のような処理です。

会員登録
ログイン
問い合わせ送信
コメント投稿
データ更新
削除処理

POSTはURLに値が表示されないため、フォーム送信やデータ更新処理に向いています。

ただし、POSTで送ったからといって完全に安全になるわけではありません。

ユーザーが送信値を変更することは可能なので、サーバー側で必ずバリデーションを行う必要があります。

isset() を使ってパラメーターを取得する方法

isset() の基本

PHPでは、値が存在するかどうかを確認するために isset() を使うこともできます。

if (isset($_GET['page'])) {
    $page = $_GET['page'];
} else {
    $page = 1;
}

このコードは、page が存在すればその値を使い、存在しなければ 1 を使うという意味です。

三項演算子を使うと、次のように短く書けます。

$page = isset($_GET['page']) ? $_GET['page'] : 1;

PHP 7以降であれば、null合体演算子を使ってさらに簡潔に書けます。

$page = $_GET['page'] ?? 1;

現在は、この書き方がシンプルでよく使われます。

数値パラメーターを取得する方法

URLから取得した値は基本的に文字列

URLから取得した値は、基本的に文字列として扱われます。

たとえば、次のURLでアクセスしたとします。

list.php?page=3

PHPで次のように取得した場合、

$page = $_GET['page'] ?? 1;

$page には "3" という文字列が入ることがあります。

ページ番号やIDとして使う場合は、整数に変換しておくと安全です。

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1;

さらに、ページ番号が 1 未満にならないようにするなら、次のように書けます。

$page = max(1, (int)($_GET['page'] ?? 1));

この書き方にすると、次のようなURLでアクセスされても、

?page=-5

$page1 になります。

数値として正しいか検証する方法

単純に整数へ変換するだけであれば (int) で問題ありません。

ただし、不正な値を判定したい場合は filter_input() を使う方法もあります。

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);

if ($page === false || $page === null || $page < 1) {
    $page = 1;
}

FILTER_VALIDATE_INT を使うと、値が整数として妥当かどうかを検証できます。

たとえば、次のようなURLでアクセスされた場合、

?page=abc

filter_input() では整数として妥当ではないため、false になります。

そのため、ページ番号やIDなど、数値として正しいか確認したい場面では filter_input() が便利です。

IDパラメーターを取得する方法

商品IDや記事IDを取得する例

商品詳細ページや記事詳細ページでは、URLにIDを付けることがよくあります。

product.php?id=123

この場合、PHPでは次のように取得できます。

$id = isset($_GET['id']) ? (int) $_GET['id'] : 0;

if ($id <= 0) {
    echo '不正なIDです。';
    exit;
}

echo '商品ID:' . $id;

IDやページ番号などの数値パラメーターは、必ず数値として扱うようにしましょう。

データベース検索に使う場合も、取得した値をそのままSQLに埋め込むのではなく、プリペアドステートメントを使うことが重要です。

複数のGETパラメーターを取得する方法

検索条件や並び替えを取得する例

商品一覧ページでは、複数の条件をURLで受け取ることがあります。

products.php?category=bag&sort=price&page=2

PHPでは次のように取得できます。

$category = $_GET['category'] ?? '';
$sort = $_GET['sort'] ?? 'new';
$page = max(1, (int)($_GET['page'] ?? 1));

ただし、sort のように処理内容に影響する値は、許可した値だけを受け付けるようにした方が安全です。

$allowedSorts = ['new', 'price_asc', 'price_desc'];
$sort = $_GET['sort'] ?? 'new';

if (!in_array($sort, $allowedSorts, true)) {
    $sort = 'new';
}

このようにホワイトリストで制限することで、想定外の値が送られてきても安全に処理できます。

配列形式のパラメーターを取得する方法

チェックボックスの値を配列で取得する

フォームで複数選択を使う場合、パラメーターが配列になることがあります。

たとえば、チェックボックスで複数の色を選ばせる場合です。

<form method="get" action="">
    <label>
        <input type="checkbox" name="colors[]" value="red">
        赤
    </label>
    <label>
        <input type="checkbox" name="colors[]" value="blue">
        青
    </label>
    <label>
        <input type="checkbox" name="colors[]" value="green">
        緑
    </label>
    <button type="submit">検索</button>
</form>

PHP側では次のように取得します。

$colors = $_GET['colors'] ?? [];

if (!is_array($colors)) {
    $colors = [];
}

foreach ($colors as $color) {
    echo htmlspecialchars($color, ENT_QUOTES, 'UTF-8') . '<br>';
}

URLは次のようになります。

?colors[]=red&colors[]=blue

この場合、$_GET['colors'] には次のような配列が入ります。

[
    'red',
    'blue'
]

配列パラメーターは許可リストで制限する

配列パラメーターを扱う場合も、想定外の値が送られてくる可能性があります。

そのため、実務では許可する値だけを残す処理を入れると安全です。

$colors = $_GET['colors'] ?? [];

if (!is_array($colors)) {
    $colors = [];
}

$allowedColors = ['red', 'blue', 'green'];

$colors = array_values(array_intersect($colors, $allowedColors));

このようにすると、redbluegreen 以外の値が送られてきても除外できます。

文字列パラメーターを安全に取得する方法

配列が送られてくる可能性に注意する

文字列として取得するつもりのパラメーターでも、想定外に配列として送られてくることがあります。

たとえば、通常は次のようなURLを想定しているとします。

search.php?keyword=php

この場合は、次のように取得できます。

$keyword = trim($_GET['keyword'] ?? '');

しかし、次のようなURLでアクセスされる可能性もあります。

search.php?keyword[]=php

この場合、$_GET['keyword'] は文字列ではなく配列になります。

そのため、より安全に書くなら次のようにします。

$keyword = $_GET['keyword'] ?? '';

if (!is_string($keyword)) {
    $keyword = '';
}

$keyword = trim($keyword);

初心者向けのサンプルでは簡略化しても問題ありませんが、実務ではこのような型チェックも意識しておくと安全です。

filter_input() を使ってパラメーターを取得する方法

filter_input() の基本

PHPには、パラメーターを取得しながら検証できる filter_input() があります。

GETパラメーターを整数として取得したい場合は、次のように書けます。

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);

メールアドレスを検証する場合は、次のように書けます。

$email = filter_input(INPUT_POST, 'email', FILTER_VALIDATE_EMAIL);

if ($email === false || $email === null) {
    echo 'メールアドレスが正しくありません。';
    exit;
}

filter_input() は、入力値が指定した形式として妥当かどうかを確認したい場合に便利です。

ただし、これだけで完全に安全になるわけではありません。

取得した値を何に使うかによって、追加のバリデーションやエスケープが必要です。

$_REQUEST は使ってもよいのか

基本的には $_GET$_POST を使い分ける

PHPには $_REQUEST というスーパーグローバル変数もあります。

$value = $_REQUEST['keyword'] ?? '';

$_REQUEST は、GET、POST、Cookieなどに由来する値をまとめて扱える変数です。

一見便利ですが、実務ではあまりおすすめしません。

理由は、値がどこから送られてきたのか分かりにくくなるためです。

たとえば、同じ id という名前の値がGET、POST、Cookieに存在した場合、どの値を使っているのかが分かりにくくなります。

$_GET['id']
$_POST['id']
$_COOKIE['id']

さらに、$_REQUEST に何が含まれるかはPHPの設定に影響される場合があります。

そのため、基本的には次のように、取得元を明示する書き方がおすすめです。

$id = $_GET['id'] ?? null;

または、

$email = $_POST['email'] ?? '';

HTMLに出力するときはエスケープする

htmlspecialchars() を使う

取得したパラメーターをHTMLにそのまま出力するのは危険です。

たとえば、次のようなURLでアクセスされる可能性があります。

search.php?keyword=<script>alert(1)</script>

この値をそのまま出力すると、XSSの原因になる可能性があります。

echo $_GET['keyword'];

そのため、HTMLに表示する場合は htmlspecialchars() を使います。

$keyword = $_GET['keyword'] ?? '';

echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');

よく使う場合は、関数化しておくと便利です。

function h($value) {
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

$keyword = $_GET['keyword'] ?? '';

echo h($keyword);

サニタイズとエスケープの違い

パラメーターを扱うときは、サニタイズとエスケープを混同しないことが大切です。

サニタイズは、入力値を用途に合わせて整える処理です。

たとえば、前後の空白を削除したり、不要な文字を除去したりします。

$keyword = trim($_GET['keyword'] ?? '');

一方、エスケープは、出力先に合わせて安全に表示する処理です。

HTMLに出力するなら、次のようにします。

echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');

つまり、基本的な考え方は次の通りです。

入力時:必要に応じてバリデーション・サニタイズする
出力時:出力先に合わせてエスケープする

実務向けのGETパラメーター取得例

検索ページのサンプルコード

以下は、検索キーワード、ページ番号、並び順を取得する実務向けの例です。

<?php
function h(string $value): string
{
    return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
}

// keyword:文字列として取得
$keyword = $_GET['keyword'] ?? '';

if (!is_string($keyword)) {
    $keyword = '';
}

$keyword = trim($keyword);

// page:整数として取得
$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);

if ($page === false || $page === null || $page < 1) {
    $page = 1;
}

// sort:許可した値だけ受け付ける
$allowedSorts = ['new', 'price_asc', 'price_desc'];
$sort = $_GET['sort'] ?? 'new';

if (!is_string($sort) || !in_array($sort, $allowedSorts, true)) {
    $sort = 'new';
}
?>

<form method="get" action="">
    <input type="text" name="keyword" value="<?php echo h($keyword); ?>">
    
    <select name="sort">
        <option value="new" <?php echo $sort === 'new' ? 'selected' : ''; ?>>新着順</option>
        <option value="price_asc" <?php echo $sort === 'price_asc' ? 'selected' : ''; ?>>価格が安い順</option>
        <option value="price_desc" <?php echo $sort === 'price_desc' ? 'selected' : ''; ?>>価格が高い順</option>
    </select>

    <button type="submit">検索</button>
</form>

<p>検索キーワード:<?php echo h($keyword); ?></p>
<p>ページ番号:<?php echo $page; ?></p>
<p>並び順:<?php echo h($sort); ?></p>

このコードでは、次のような対策を行っています。

存在しないパラメーターへの対応
文字列パラメーターの型チェック
数値パラメーターの検証
並び順のホワイトリスト化
HTML出力時のエスケープ

検索フォームや一覧ページでは、このような書き方をベースにすると安全です。

URLのクエリ文字列を自分で解析する方法

$_SERVER['QUERY_STRING'] を使う

通常は $_GET を使えば十分ですが、現在のクエリ文字列そのものを扱いたい場合もあります。

現在のクエリ文字列は、次のように取得できます。

$queryString = $_SERVER['QUERY_STRING'] ?? '';

echo $queryString;

たとえば、URLが次のような場合、

search.php?keyword=php&page=2

$_SERVER['QUERY_STRING'] には、次の文字列が入ります。

keyword=php&page=2

parse_str() で配列に変換する

クエリ文字列を配列に変換したい場合は、parse_str() を使います。

$queryString = $_SERVER['QUERY_STRING'] ?? '';

$params = [];
parse_str($queryString, $params);

print_r($params);

結果は次のようになります。

Array
(
    [keyword] => php
    [page] => 2
)

parse_str() を使う場合は、第2引数に配列を指定する書き方がおすすめです。

parse_str($queryString, $params);

第2引数を省略すると、クエリ文字列の内容が変数として展開されるため、意図しない変数が作られる可能性があります。

パスパラメーターを取得する方法

REQUEST_URI を使う

URLには、クエリパラメーターではなく、パスに値を含める形式もあります。

たとえば、次のようなURLです。

/product/123

このような形式の値を取得したい場合、素のPHPでは $_SERVER['REQUEST_URI'] を使います。

$requestUri = $_SERVER['REQUEST_URI'];

echo $requestUri;

たとえば、次のURLでアクセスされたとします。

/product/123?ref=top

この場合、REQUEST_URI には次のような値が入ります。

/product/123?ref=top

クエリ文字列を除いたパスだけ取得したい場合は、parse_url() を使います。

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);

echo $path;

結果は次のようになります。

/product/123

さらに / で分割すれば、パスの各要素を取り出せます。

$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$segments = explode('/', trim($path, '/'));

print_r($segments);

/product/123 なら、結果は次のようになります。

Array
(
    [0] => product
    [1] => 123
)

IDを取得するなら、次のように書けます。

$id = isset($segments[1]) ? (int)$segments[1] : 0;

ただし、サブディレクトリ配下で動かしている場合や、フレームワーク、WordPressのルーティングを使っている場合は、URL構造に合わせて処理を調整する必要があります。

JSONで送られたデータをPHPで取得する方法

php://input を使う

JavaScriptの fetch() などでJSONを送る場合、PHPの $_POST では直接取得できないことがあります。

たとえば、JavaScript側で次のように送信した場合です。

fetch('api.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    keyword: 'php',
    page: 2
  })
});

PHP側では、php://input を使ってリクエストボディを取得します。

$json = file_get_contents('php://input');
$data = json_decode($json, true);

$keyword = $data['keyword'] ?? '';
$page = max(1, (int)($data['page'] ?? 1));

JSONの解析失敗にも対応する

実務では、JSONの形式が正しくない場合も考慮する必要があります。

$json = file_get_contents('php://input');
$data = json_decode($json, true);

if (!is_array($data)) {
    http_response_code(400);
    echo json_encode(['error' => 'Invalid JSON']);
    exit;
}

$keyword = $data['keyword'] ?? '';
$page = max(1, (int)($data['page'] ?? 1));

PHP 7.3以降であれば、JSON_THROW_ON_ERROR を使う書き方もできます。

try {
    $data = json_decode(
        file_get_contents('php://input'),
        true,
        512,
        JSON_THROW_ON_ERROR
    );
} catch (JsonException $e) {
    http_response_code(400);
    echo json_encode(['error' => 'Invalid JSON']);
    exit;
}

APIを作る場合は、JSONの取得だけでなく、解析失敗時の処理も入れておくと安全です。

JavaScriptから送ったパラメーターをPHPで取得する方法

GETで送る場合

JavaScriptの fetch() を使ってGET送信する場合は、URLにパラメーターを付けます。

fetch('api.php?keyword=php&page=2')
  .then(response => response.json())
  .then(data => {
    console.log(data);
  });

PHP側では、通常のGETパラメーターと同じように取得できます。

$keyword = $_GET['keyword'] ?? '';
$page = max(1, (int)($_GET['page'] ?? 1));

echo json_encode([
    'keyword' => $keyword,
    'page' => $page,
]);

POSTで送る場合

POSTでフォーム形式のデータを送る場合は、次のように書けます。

fetch('api.php', {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded',
  },
  body: 'keyword=php&page=2'
})
.then(response => response.json())
.then(data => {
  console.log(data);
});

PHP側では、$_POST で取得できます。

$keyword = $_POST['keyword'] ?? '';
$page = max(1, (int)($_POST['page'] ?? 1));

echo json_encode([
    'keyword' => $keyword,
    'page' => $page,
]);

WordPressでパラメーターを取得する方法

WordPressでも $_GET$_POST は使える

WordPressでも、基本的にはPHPなので $_GET$_POST を使ってパラメーターを取得できます。

たとえば、次のようなURLがあるとします。

https://example.com/?keyword=php

PHPでは、次のように取得できます。

$keyword = $_GET['keyword'] ?? '';

ただし、WordPressでは取得時のサニタイズと、出力時のエスケープをより意識する必要があります。

WordPressでGETパラメーターを取得する例

WordPressでGETパラメーターを取得する場合は、次のように書くと実務的です。

$keyword = '';

if (isset($_GET['keyword'])) {
    $keyword = sanitize_text_field(wp_unslash($_GET['keyword']));
}

echo esc_html($keyword);

sanitize_text_field() は、テキストフィールド向けに値を整えるための関数です。

wp_unslash() は、WordPress側で付与されるスラッシュを取り除くために使います。

HTMLに出力する場合は、esc_html() を使います。

WordPressでPOSTパラメーターを取得する例

POSTの場合も考え方は同じです。

$name = '';

if (isset($_POST['name'])) {
    $name = sanitize_text_field(wp_unslash($_POST['name']));
}

echo esc_html($name);

属性値に出力する場合は、esc_attr() を使います。

<input type="text" value="<?php echo esc_attr($name); ?>">

URLに出力する場合は、esc_url() を使います。

echo esc_url($url);

WordPressでは、出力先に応じてエスケープ関数を使い分けることが大切です。

パラメーター取得時の注意点

ユーザー入力は信用しない

GETやPOSTで送られてくる値は、ユーザーが自由に変更できます。

たとえば、HTMLフォームに選択肢が3つしかなくても、ブラウザの開発者ツールや直接リクエストを送る方法で、想定外の値を送ることは可能です。

そのため、サーバー側では必ずチェックを行いましょう。

必須項目が入力されているか
数値として正しいか
許可された値か
文字数は適切か
メールアドレスの形式が正しいか

フォーム側のバリデーションだけでなく、PHP側のバリデーションも必要です。

SQLに使う場合はプリペアドステートメントを使う

取得したパラメーターをデータベース検索に使う場合は、SQLインジェクションに注意が必要です。

危険な例は次のような書き方です。

$id = $_GET['id'] ?? 0;

$sql = "SELECT * FROM products WHERE id = $id";

IDを整数化していればリスクは下がりますが、基本的にはプリペアドステートメントを使うべきです。

PDOを使う場合は、次のように書けます。

$id = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);

if ($id === false || $id === null || $id <= 0) {
    echo '不正なIDです。';
    exit;
}

$stmt = $pdo->prepare('SELECT * FROM products WHERE id = :id');
$stmt->bindValue(':id', $id, PDO::PARAM_INT);
$stmt->execute();

$product = $stmt->fetch();

パラメーターを取得する処理と、SQLに安全に渡す処理はセットで考える必要があります。

よく使うパラメーター取得の書き方

GETパラメーターを取得する

$keyword = $_GET['keyword'] ?? '';

POSTパラメーターを取得する

$name = $_POST['name'] ?? '';

数値として取得する

$page = max(1, (int)($_GET['page'] ?? 1));

数値として検証して取得する

$page = filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT);

if ($page === false || $page === null || $page < 1) {
    $page = 1;
}

配列として取得する

$categories = $_GET['categories'] ?? [];

if (!is_array($categories)) {
    $categories = [];
}

HTML出力時にエスケープする

echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');

JSONリクエストを取得する

$data = json_decode(file_get_contents('php://input'), true);

$keyword = $data['keyword'] ?? '';

WordPressでGETパラメーターを取得する

$keyword = '';

if (isset($_GET['keyword'])) {
    $keyword = sanitize_text_field(wp_unslash($_GET['keyword']));
}

echo esc_html($keyword);

PHPでパラメーターを取得するときの実務的な考え方

取得・検証・出力を分けて考える

PHPでパラメーターを取得するときは、単に $_GET$_POST を使えばよいわけではありません。

重要なのは、次の流れで考えることです。

1. パラメーターを取得する
2. 型を確認する
3. 用途に合わせてバリデーションする
4. 必要に応じてサニタイズする
5. 出力時にエスケープする

たとえば、検索キーワード、ページ番号、並び順を扱う場合は、次のように考えます。

// 検索キーワード:文字列として扱う
$keyword = $_GET['keyword'] ?? '';

if (!is_string($keyword)) {
    $keyword = '';
}

$keyword = trim($keyword);

// ページ番号:整数として扱う
$page = max(1, (int)($_GET['page'] ?? 1));

// 並び順:許可した値だけ使う
$allowedSorts = ['new', 'price_asc', 'price_desc'];
$sort = $_GET['sort'] ?? 'new';

if (!is_string($sort) || !in_array($sort, $allowedSorts, true)) {
    $sort = 'new';
}

// HTML出力時:エスケープする
echo htmlspecialchars($keyword, ENT_QUOTES, 'UTF-8');

このように、値の種類ごとに適切な処理を行うことが大切です。

まとめ

PHPでパラメーターを取得する基本は、$_GET$_POST を使うことです。

URLのクエリパラメーターを取得する場合は、$_GET を使います。

$value = $_GET['name'] ?? '';

フォームからPOST送信された値を取得する場合は、$_POST を使います。

$value = $_POST['name'] ?? '';

ページ番号やIDなどの数値は、整数として扱います。

$id = (int)($_GET['id'] ?? 0);

JSONで送られたデータを取得する場合は、php://input を使います。

$data = json_decode(file_get_contents('php://input'), true);

ただし、取得した値はユーザーが自由に変更できるため、そのまま信用してはいけません。

実務では、次のような処理をセットで行うことが重要です。

存在チェック
型チェック
バリデーション
サニタイズ
エスケープ

特に、HTMLに出力するときは htmlspecialchars() を使い、WordPressでは esc_html()esc_attr()esc_url() などを出力先に応じて使い分けましょう。

PHPでパラメーターを取得する際は、単に値を受け取るだけでなく、安全に受け取り、安全に使い、安全に出力する ことが大切です。

以上、PHPでパラメーターを取得する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次