前回記載していますが、PHPは性質上Webアプリケーションで利用されるため、様々な外部入力の影響を受けます。そのため言語自前で入力チェックを行う機能を有しており、PHP Filter関数と呼ばれるものがあります。
今回はfilter_var()関数のやや高度な使い方をまとめています。
PHP Filter 関数
PHP Filter関数は、外部入力の検証およびサニタイズするために使用され、ユーザー入力のチェックに用いられる機能があり、データ検証を簡単かつ迅速に行えるように設計されています。
filter_list()関数を使用して、PHPが言語として提供しているFilter拡張機能のリスト一覧を確認できます。
範囲内の整数を検証する
次の例では、filter_var()関数を使って、ある変数の型がintで、かつ1から200までの値であるかどうかを調べます。
<?php
/* variable to check */
$target_num = 115;
/* min value */
$min = 1;
/* max value */
$max = 200;
if (filter_var($target_num, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max))) === false) {
var_dump("Variable value is not within the legal range");
} else {
var_dump("Variable value is within the legal range");
}
//string(40) "Variable value is within the legal range"
IPv6アドレスの検証
filter_var() 関数を使用して、変数$ipが有効なIPv6アドレスであるかどうかを調べます。
<?php
// Variable to check
$ip = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
// Validate ip as IPv6
if (!filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) === false) {
var_dump("$ip is a valid IPv6 address");
} else {
var_dump("$ip is not a valid IPv6 address");
}
//string(63) "2001:0db8:85a3:08d3:1319:8a2e:0370:7334 is a valid IPv6 address"
URLの検証 - クエリ文字列が含まれているか
次の記述ではfilter_var()関数を使用して、変数 $url がクエリストリングを含むURLであるかどうか調べています。
<?php
// Variable to check
$url = "https://www.w3schools.com";
// Validate url
if (!filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED) === false) {
var_dump("$url is a valid URL with a query string");
} else {
var_dump("$url is not a valid URL with a query string");
}
// string(64) "https://www.w3schools.com is not a valid URL with a query string"
ASCII 値が127以上の文字の除去
filter_var()関数を使って文字列をサニタイズ出来ます。ASCIIは127が最後の値なので、この例では対象の文字列からHTMLタグすべてと、ASCII 値が 127 を超える文字を削除しています。
<?php // Variable to check $str = "<h1>Hello WorldÆØÅ!</h1>"; // Remove HTML tags and all characters with ASCII value > 127 $newstr = filter_var($str, FILTER_SANITIZE_STRING, FILTER_FLAG_STRIP_HIGH); var_dump($newstr); // string(12) "Hello World!"