PHP フィルタ

❮ 前章へ 次章へ ❯

データの検証 = データが適切な形式であるかどうかを判断します。

データの除去 = データから不正な文字を削除します。


PHP フィルタ拡張

PHPフィルタは、外部入力の検証と除去に使用します。

PHPフィルタ拡張モジュールには、ユーザの入力を確認するために必要な多くの関数があり、データの検証をより簡単かつ迅速に行えるように設計されています。

filter_list()関数は、PHPフィルタ拡張が提供するものをリストするために使用することができます:

<table>
  <tr>
    <td>Filter Name</td>
    <td>Filter ID</td>
  </tr>
  <?php
  foreach (filter_list() as $id =>$filter) {
      echo '<tr><td>' . $filter . '</td><td>' . filter_id($filter) . '</td></tr>';
  }
  ?>
</table>
例の実行 »

なぜフィルタを使用するのか?

多くのWebアプリケーションは外部入力を受取ります。外部入力/データには、次のものがあります:

外部データは常に検証する必要があります!
送信データが無効な場合、セキュリティ上の問題を引き起こし、webページが壊す可能性があります!
PHPフィルタを使用することで、アプリケーションは正しい入力を得られることを確認できます!


PHP filter_var() 関数

filter_var() 関数は、データの検証とサニタイズ(除去)を行います。

filter_var() 関数は、指定のフィルタを持つ1つの変数をフィルタリングします。次の2つのデータが必要です:


文字列のサニタイズ

次の例では、文字列からすべてのHTMLタグを削除するため filter_var()関数を使用します:

<?php
$str = "<h1>Hello World!</h1>";
$newstr = filter_var($str, FILTER_SANITIZE_STRING);
echo $newstr;
?>
例の実行 »

整数の検証

次の例は、filter_var()関数を使用して、変数$intが整数かどうかを確認します。 $intが整数の場合、上のコードの出力は "Integer is valid" になり、$intが整数でない場合、出力は "Integer is not valid" になります:

<?php
$int = 100;

if (!filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer is valid");
} else {
    echo("Integer is not valid");
}
?>
例の実行 »

チップ: filter_var()と0の問題

上の例では、$intに0が設定されていると、関数は "Integer is not valid" を返します。 この問題を解決するには、以下のコードを使用します:

<?php
$int = 0;

if (filter_var($int, FILTER_VALIDATE_INT) === 0 || !filter_var($int, FILTER_VALIDATE_INT) === false) {
    echo("Integer is valid");
} else {
    echo("Integer is not valid");
}
?>
例の実行 »

IPアドレスの検証

次の例は、filter_var()関数を使用して、変数$ipが有効なIPアドレスであるかどうかを確認します:

<?php
$ip = "127.0.0.1";

if (!filter_var($ip, FILTER_VALIDATE_IP) === false) {
    echo("$ip is a valid IP address");
} else {
    echo("$ip is not a valid IP address");
}
?>
例の実行 »

メールアドレスのサニタイズと検証

次の例は、filter_var()関数を使用し、最初に$email変数からすべての不正な文字を削除した後で、有効な電子メールアドレスかどうかを確認します:

<?php
$email = "john.doe@example.com";

// Remove all illegal characters from email
$email = filter_var($email, FILTER_SANITIZE_EMAIL);

// Validate e-mail
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
    echo("$email is a valid email address");
} else {
    echo("$email is not a valid email address");
}
?>
例の実行 »

URLのサニタイズと検証

次の例は、filter_var()関数を使用し、最初にURLから不正な文字をすべて削除した後で、$urlが有効なURLであるかどうかを確認します:

<?php
$url = "https://www.w3schools.com";

// Remove all illegal characters from a url
$url = filter_var($url, FILTER_SANITIZE_URL);

// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL) === false) {
    echo("$url is a valid URL");
} else {
    echo("$url is not a valid URL");
}
?>
例の実行 »

完全なPHPフィルタリファレンス

すべてのフィルタ関数の完全なリファレンスについては、完全な PHP フィルタ・リファレンスをご覧ください。 各フィルタをチェックして、利用可能なオプションとフラグを確認してください。

リファレンスには、各機能の簡単な説明と使用例が含まれています!


❮ 前章へ 次章へ ❯