【PHP8.x】FILTER_DEFAULT定数の使い方
FILTER_DEFAULT定数の使い方について、初心者にもわかりやすく解説します。
基本的な使い方
FILTER_DEFAULT定数は、PHPのフィルター機能において、特別なフィルター処理を適用しないデフォルトの状態を表す定数です。主にfilter_var()やfilter_input()といった関数で使用され、入力された値に対して特定の検証やサニタイズ(無害化)を行わないことを指定します。
この定数を指定した場合、入力値は基本的に文字列として扱われ、そのまま返されます。数値への変換やHTMLタグの除去などの加工は一切行われません。これは、値に対して「何もしない」という状態を示すものであり、本質的なフィルター処理は行われないことを意味します。
他のフィルター定数(例: FILTER_VALIDATE_EMAILでメールアドレスの形式を検証する、FILTER_SANITIZE_FULL_SPECIAL_CHARSで特殊文字をHTMLエンティティに変換する、など)と異なり、データの検証やサニタイズを行わないため、悪意のあるデータがそのままシステムに渡されるリスクがあります。特に、ウェブフォームなどからユーザーが入力した値を受け取る際には、セキュリティ上の問題を防ぐため、この定数ではなく、用途に応じた適切な検証・サニタイズフィルターを明示的に指定することが強く推奨されます。
したがって、FILTER_DEFAULTは、フィルター処理を適用しない「生のデータ」を扱う場合に用いられますが、その使用にはセキュリティの観点から細心の注意が必要です。
構文(syntax)
1<?php 2var_dump(FILTER_DEFAULT);
引数(parameters)
引数なし
引数はありません
戻り値(return)
int
FILTER_DEFAULTは、フィルタリング処理のデフォルトの動作を示す定数です。この定数は、特定のフィルタ関数において、明示的なフラグが指定されない場合に適用される動作を定義するために使用されます。
サンプルコード
PHP FILTER_DEFAULT 入力処理を理解する
1<?php 2 3/** 4 * FILTER_DEFAULT 定数の使用例 5 * 6 * FILTER_DEFAULT は、PHPのフィルタリング関数 (例: filter_input(), filter_var()) で使用される定数です。 7 * この定数をフィルタリングオプションとして指定すると、入力値は特別なフィルタリングやバリデーションなしに 8 * そのまま返されます。 9 * 10 * 名前に「DEFAULT」と含まれるため、「入力がない場合に特定のデフォルト値を提供する」と誤解されがちですが、 11 * FILTER_DEFAULT はその機能を持っていません。 12 * 他の多くのフィルターと同様に、入力値が提供されない場合は null を返します。 13 * これは「デフォルトのフィルタリング動作」(つまり、入力値を加工せずにそのまま扱う)を意味します。 14 * 15 * PHPリファレンス情報が示す通り、FILTER_DEFAULT 定数自体は整数型の値を持ちます。 16 */ 17function demonstrateFilterDefault(): void 18{ 19 echo "<h3>FILTER_DEFAULT の使用例</h3>"; 20 echo "<p>このデモでは、<code>filter_input(INPUT_GET, 'パラメータ名', FILTER_DEFAULT)</code> の動作を示します。</p>"; 21 22 // シナリオ1: GETパラメータ 'user_name' が存在する場合 23 // このデモコードでは、$_GET グローバル変数を直接設定してWebリクエストを模倣しています。 24 $_GET['user_name'] = 'John Doe'; 25 $userName = filter_input(INPUT_GET, 'user_name', FILTER_DEFAULT); 26 27 echo "<h4>シナリオ1: 'user_name' が 'John Doe' の場合</h4>"; 28 echo "<code>filter_input(INPUT_GET, 'user_name', FILTER_DEFAULT)</code> の結果:<br>"; 29 echo "取得された値 (user_name): " . var_export($userName, true) . "<br>"; 30 echo "期待される結果: 'John Doe' (入力値がそのまま返される)<br><br>"; 31 32 // シナリオ2: GETパラメータ 'age' が存在しない場合 33 // $_GET['age'] が設定されていないと仮定します。 34 // これは、URLに '?age=...' のようなパラメータが含まれていない場合と同じです。 35 // 確実に存在しない状態にするため、もし設定されていれば unset します。 36 unset($_GET['age']); 37 $age = filter_input(INPUT_GET, 'age', FILTER_DEFAULT); 38 39 echo "<h4>シナリオ2: 'age' が存在しない場合</h4>"; 40 echo "<code>filter_input(INPUT_GET, 'age', FILTER_DEFAULT)</code> の結果:<br>"; 41 echo "取得された値 (age): " . var_export($age, true) . "<br>"; 42 echo "期待される結果: null (入力が存在しないため)<br><br>"; 43 44 // シナリオ3: FILTER_DEFAULT 定数自体の値と型を確認 45 echo "<h4>FILTER_DEFAULT 定数の値と型</h4>"; 46 echo "FILTER_DEFAULT の値: " . FILTER_DEFAULT . "<br>"; 47 echo "gettype(FILTER_DEFAULT) の結果: " . gettype(FILTER_DEFAULT) . "<br>"; 48 echo "この定数自体は、PHPリファレンス情報通り整数型です。<br>"; 49} 50 51// 関数を実行してデモンストレーションを表示します 52demonstrateFilterDefault(); 53 54?>
FILTER_DEFAULTは、PHPのfilter_input()やfilter_var()といったフィルタリング関数で利用される特別な定数です。この定数をフィルタリングオプションとして指定すると、入力された値は特別な加工や検証を受けることなく、そのままの形で返されます。これは、「デフォルトのフィルタリング動作」、つまり入力値をそのまま扱うことを意味します。
名前に「DEFAULT」と含まれるため、「入力がない場合に特定のデフォルト値を設定する」機能があるように誤解されがちですが、FILTER_DEFAULTはそのような機能は持ちません。もしフィルタリング対象の入力値が存在しない場合、他の多くのフィルターと同様にnullを返します。
この定数自体は引数を取らず、PHPリファレンス情報が示す通り、内部的には整数型の値を持ちます。主に、ウェブフォームからのユーザー入力を取得する際に、特定の形式チェックが不要なフィールドに対して、安全に値を取得したい場合に活用されます。
FILTER_DEFAULTは、入力が存在しない場合に特定のデフォルト値を提供するものではありません。名前に「DEFAULT」とありますが、これは「デフォルトのフィルタリング動作」(入力値を加工せずにそのまま扱う)を意味します。入力値が存在しない場合は、他の多くのフィルターと同様にnullを返しますので、取得した値がnullであるかどうかのチェックが重要です。入力値が存在する場合は、特別なフィルタリングやバリデーションなしにそのまま返されます。そのため、安全なデータ利用のためには、別途バリデーションやサニタイズ処理が必要です。サンプルコードでは$_GETを直接設定して動作を模倣していますが、実際のWebアプリケーションではHTTPリクエストに応じてfilter_inputが自動的に処理します。