English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
このチュートリアルでは、PHPでのユーザー入力のクリーンアップと验证方法を学びます。
ユーザー入力のクリーンアップと验证
データを验证するためにフィルタ拡張を使用するには、PHPのfilter_var()機能を使用する必要があります。この関数の基本的な文法は以下のように示されます:
filter_var(variable, filter, options)
この関数には3つのパラメータがあり、最後の2つはオプションです。第1つのパラメータはフィルタリングする値、第2つのパラメータは適用するフィルタのID、第3つのパラメータはフィルタに関連するオプションの配列です。その動作を見てみましょう。
以下の例では、文字列からすべてのHTMLタグを削除して文字列をクリーンアップします:
<?php //ユーザーコメントの例 $comment = "<h1>こんにちは!今日はどうですか?</h1>"; //コメント文字列をクリーンアップして表示 $sanitizedComment = filter_var($comment, FILTER_SANITIZE_STRING); echo $sanitizedComment; ?>テストを見てみましょう‹/›
上記の例の出力は以下の通りです:
こんにちは!今日はどうですか?
以下の例では、この値が有効な整数かどうかを確認します。
<?php // サンプルの整数値 $int = 20; // 整値の確認 if(filter_var($int, FILTER_VALIDATE_INT)){ echo "<b>$int</b> は有効な整数です"; } else{ echo "<b>$int</b> は有効な整数ではありません"; } ?>テストを見てみましょう‹/›
上記の例では、変数\$intを0に設定すると、サンプルコードは無効な整数メッセージを表示します。この問題を解決するには、以下のように値0を明示的にテストする必要があります:
<?php //サンプルの整数値 \$int = 0; // サンプル整数値の確認 if(filter_var(\$int, FILTER_VALIDATE_INT) === 0 || filter_var(\$int, FILTER_VALIDATE_INT)){ echo "The <b>\$int</b> は有効な整数です"; } else{ echo "The <b>\$int</b> は有効な整数ではありません"; } ?>テストを見てみましょう‹/›
以下の例では、値が有効なIPアドレスであるかどうかを確認します。
<?php // IPアドレス \$ip = "172.16.254.1"; // IPアドレスの確認例 if(filter_var(\$ip, FILTER_VALIDATE_IP)){ echo "<b>\$ip</b> は有効なIPアドレスです"; } else { echo "<b>\$ip</b> は有効なIPアドレスではありません"; } ?>テストを見てみましょう‹/›
FILTER_FLAG_IPVを使用してそれぞれ別々に使用できます4またはFILTER_FLAG_IPV6をさらにマークする4またはIPV6 IPアドレスの確認は以下の例で示されています。これは一例です:
<?php // IPアドレス \$ip = "172.16.254.1"; // IPアドレスの確認例 if(filter_var(\$ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)) { echo "<b>\$ip</b> は有効なIPV6アドレス"; } else { echo "<b>\$ip</b> は有効なIPV6アドレス"; } ?>テストを見てみましょう‹/›
以下の例では、メールアドレスのクリーンアップと確認方法を説明します。
<?php // メールアドレス \$email = "someone@@example.com"; //メールからすべての無効な文字を削除 \$sanitizedEmail = filter_var(\$email, FILTER_SANITIZE_EMAIL); //メールアドレスの確認 if(\$email == \$sanitizedEmail && filter_var(\$email, FILTER_VALIDATE_EMAIL)){ echo "\$email は有効なメールアドレスです"; } else{ echo "\$email は有効なメールアドレスではありません"; } ?>テストを見てみましょう‹/›
注:FILTER_SANITIZE_EMAILフィルタは、除くアルファベット、数字および提供されたメールアドレス文字列からすべての無効な文字を削除します!#$%&'*+-=?^_`{|}~@.[]。
以下の例では、URLをクリーンアップし、確認する方法を示します。
<?php // url 例 $url = "http:://www.example.com"; //URLからすべての無効な文字を削除 $sanitizedUrl = filter_var($url, FILTER_SANITIZE_URL); // ウェブサイトURLを確認 if($url == $sanitizedUrl && filter_var($url, FILTER_VALIDATE_URL)){ echo "$url は有効なウェブサイトURLです"; } else{ echo "$url は有効なウェブサイトURLではありません"; } ?>テストを見てみましょう‹/›
注意:FILTER_SANITIZE_URLフィルタは、除くアルファベット、数字、および提供されたURL文字列中のすべての無効な文字を削除します$-_。+!*「(),{}|\\^~[]`<>#%";/?:@&=。
以下の例では、URLがクエリ文字列を含むかどうかをチェックするflagを使用する方法を示しますFILTER_FLAG_QUERY_REQUIRED
<?php //url $url = "http://www.example.com?topic=filters"; //クエリ文字列を取得するためのウェブサイトURLを確認 if(filter_var($url, FILTER_VALIDATE_URL, FILTER_FLAG_QUERY_REQUIRED)){ echo "<b>$url</b> クエリ文字列を含む"; } else{ echo "<b>$url</b> クエリ文字列を含まない"; } ?>テストを見てみましょう‹/›
参照してくださいHTML URLの方法を学ぶためのURLの異なる部分を確認します。
以下の例では、提供された値が整数であるかどうか、およびそれが0から100の範囲内です。
<?php // サンプルの整数値 $int = 75; //サンプルの整数値を確認 if(filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range" => 0,"max_range" => 100)))){ echo "<b>$int</b> 0から100の範囲内"; } else{ echo "<b>$int</b> 0から100の範囲内"; } ?>テストを見てみましょう‹/›