PHPにおけるfilter関数によるデータの検証方法の詳細
11623 ワード
PHPのfilter関数でデータを検証する方法の詳細を説明します.PHPフィルタには、Validationが検証アイテムが正当かどうかを検証するために使用され、Sanitizationが検証アイテムをフォーマットするために使用されるため、検証アイテムの値を変更し、不正な文字を削除する可能性があります.
input_filters_list()
現在のシステムでサポートされているすべてのフィルタをリストします.
以上のコードは次の情報を出力します.
各フィルタは独自のIDを持つ.ここのフィルタはfilter_var()関数で使用します.それぞれの使い方をご紹介します.上のstringはstrippedIDと同じです.これは彼らが同じフィルタ、あるいは同じフィルタの2つの別名だからです.
データのフィルタ
filter_の使用var()メソッドはデータをフィルタリングし、以下は簡単なフィルタリング例である.
上のコードは整数型の1234をデータします.$int変数が通過した整数型の検証のため、今回は$int変数の内容を交換します.
このとき、コードが実行され、$in変数が検証されていないため、この方法はbool(false)を返す変数出力がないことが分かった.また、$int="でもbool(false)が返されることに注意してください.
整数検証
上記のいくつかのセグメントコードは、与えられた値が整数であるかどうかの例を簡単に検証した.実はFILTER_VALIDATE_INTも数値範囲の検証を提供しています.次に、変数を検証し、整数型であるかどうかを判断し、その値が50から100の間にあるかどうかを検証します.
上のコードを実行して、42が出力されたことに気づいて、何の間違いも発見していません.これはなぜですか?検証に追加の検証ルールを追加するには、「options」キーを含む配列を渡す必要があります.次のようにします.
上のコードを実行すると、falseが返され、検証に成功したことを示すため、ページに出力はありません.
この方法を使用して、負数の範囲検証を行うこともできます.また、この方法では、最大値または最小値の範囲を指定するだけで、次のような単一の範囲の値を取得することもできます.
上記のコードは、$intが$min以上の整数タイプの値であることを検証し、コードを実行し、12を出力します.
変数のセットの検証
上記の例は単純に単一の値を検証するだけですが、変数のセットを検証するとしたら?答えはfilterを使うことですvar_array().この関数は、複数の異なるタイプのデータを同時に検証できます.ここではまず簡単な例を示します.
上記のコードを実行し、次のように出力します.
8進数と16進数
FILTER_VALIDATE_INTフィルタは、8進数と16進数の両方をサポートします.この2つのflagsは、次のとおりです.
FILTER_FLAG_ALLOW_HEX FILTER_FLAG_ALLOW_OCTALは配列を利用してflagsを伝達する
Boolean認証FILTER_VALIDATE_BOOLEAN
上のコード出力1は、フィルタが有効なブール値を発見したため、trueを返すことができる他の値がリストされています.
次の値はfalseを返します.
また、次の使い方もサポートされています.
上のコードでは、まずin_を判断しましたarray関数の実行に成功し、trueを返したので、最後にこのコードはtrueを出力します.
配列を渡して配列中の値のbooleanタイプを判断することもできます
上のコードは次のように出力されます.
浮動小数点認証FILTER_VALIDATE_FLOAT
配列の浮動小数点型検証
他の検証と同様に、1つの配列に対して浮動小数点型検証を行うこともできます.boolean検証と同様に、flgs FILTER_を提供します.REQUIRE_ARRAY.
上のコード出力は以下の通りです.
浮動小数点フィルタは、数値間の区切り文字を指定することをサポートします.
上記のコードでは、$floats関数の最初の要素値は','であるため、1234値を判断する際に区切り記号を','と指定するので、true上のコードの完全な戻り値を返します.
URL FILTER_の検証VALIDATE_URL
URLの検証は困難な行為であり、URLの不確実性のため、最大長の制限はなく、そのフォーマットは多様化しており、RFC 1738を読むことでURLに関するいくつかの情報を知ることができます.その後、すべてのipv 4およびipv 6のURL、および他のURLの検証を検証するクラスを作成できます.FILTERも簡単に使えますVALIDATE_URLでURLを検証します.
上記の例では,与えられたURLが正当であるか否かを簡単なif文で判断しているが,すべてのURLがこのようなフォーマットであるわけではない.URLがIPアドレスである場合もあれば、URLに複数のパラメータが渡されている場合もあります.URLの検証に役立つflagsはいくつかあります.
FILTER_FLAG_SCHEME_REQUIRD�C要求URLはRFC対応URLです.(例:http://cg.am) FILTER_FLAG_HOST_REQUIRD�C要求URLはホスト名を含む(例:http://levi.cg.com) FILTER_FLAG_PATH_REQUIRD、CはURLがホスト名の後に経路が存在することを要求する(例えば:http://levi.cg.am/test/phpmailer/) FILTER_FLAG_QUERY_REQUIRD�CはURLに検索文字列が存在することを要求する(例えば:http://levi.cg.am/?p=2618)
上のコードが検証されていないことがわかります
IPフィルタFILTER_VALIDATE_IP
FILTER_VALIDATE_IPフィルタは値をIPとして検証する.Name:「validate_ip」ID-number:275可能なフラグ:
FILTER_FLAG_IPV 4、C要求値は正当なIPv 4 IP(例えば:255.255.255.255.255)FILTER_FLAG_IPV 6であり、C要求値は正当なIPv 6 IP(例えば:2001:0 db 8:85 a 3:08 d 3:1319:8 a 2 e:0370:7334)FILTER_FLAG_NO_PRIV_RANGEであり、C要求値はRFC指定のプライベートドメインIPである(例えば192.168.0.1)FILTER_FLAG_NO_RES_RANGE、C要求値は保留中のIP範囲内ではない.このフラグはIPV 4とIPV 6の値を受け入れる.EmailフィルタFILTER_VALidate_EMAIL
FILTER_VALIDATE_EMAILフィルタは、値を電子メールアドレスとして検証します.
カスタムフィルタFILTER_CALLBACK
FILTER_CALLBACKフィルタは、ユーザー定義関数を使用して値をフィルタします.
このフィルタは、データフィルタリングの完全な制御を提供します.
指定した関数は、「options」という関連配列に格納する必要があります.
しゅつりょく
以上述べたのが本文のすべての内容で、みんなが好きになることを望みます.
input_filters_list()
現在のシステムでサポートされているすべてのフィルタをリストします.
foreach(filter_list() as $id => $filter)
{
echo $filter.' '.filter_id($filter)."
";
}
?>
以上のコードは次の情報を出力します.
Filter Name Filter ID
int 257
boolean 258
float 259
validate_regexp 272
validate_url 273
validate_email 274
validate_ip 275
string 513
stripped 513
encoded 514
special_chars 515
full_special_chars 522
unsafe_raw 516
email 517
url 518
number_int 519
number_float 520
magic_quotes 521
callback 1024
各フィルタは独自のIDを持つ.ここのフィルタはfilter_var()関数で使用します.それぞれの使い方をご紹介します.上のstringはstrippedIDと同じです.これは彼らが同じフィルタ、あるいは同じフィルタの2つの別名だからです.
データのフィルタ
filter_の使用var()メソッドはデータをフィルタリングし、以下は簡単なフィルタリング例である.
/*** an integer to check ***/
$int = 1234;
/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT);
//1234
?>
上のコードは整数型の1234をデータします.$int変数が通過した整数型の検証のため、今回は$int変数の内容を交換します.
/*** an integer to check ***/
$int = 'abc1234';
/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT);
?>
このとき、コードが実行され、$in変数が検証されていないため、この方法はbool(false)を返す変数出力がないことが分かった.また、$int="でもbool(false)が返されることに注意してください.
整数検証
上記のいくつかのセグメントコードは、与えられた値が整数であるかどうかの例を簡単に検証した.実はFILTER_VALIDATE_INTも数値範囲の検証を提供しています.次に、変数を検証し、整数型であるかどうかを判断し、その値が50から100の間にあるかどうかを検証します.
$min, "max_range" => $max));
//42
?>
上のコードを実行して、42が出力されたことに気づいて、何の間違いも発見していません.これはなぜですか?検証に追加の検証ルールを追加するには、「options」キーを含む配列を渡す必要があります.次のようにします.
/*** an integer to check ***/
$int = 42;
/*** lower limit of the int ***/
$min = 50;
/*** upper limit of the int ***/
$max = 100;
/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range" => $min, "max_range" => $max)));
?>
上のコードを実行すると、falseが返され、検証に成功したことを示すため、ページに出力はありません.
この方法を使用して、負数の範囲検証を行うこともできます.また、この方法では、最大値または最小値の範囲を指定するだけで、次のような単一の範囲の値を取得することもできます.
/*** an integer to check ***/
$int = 12;
/*** lower limit of the int ***/
$min = 10;
/*** validate the integer ***/
echo filter_var($int, FILTER_VALIDATE_INT,array('options' => array('min_range' => $min)));
//12
?>
上記のコードは、$intが$min以上の整数タイプの値であることを検証し、コードを実行し、12を出力します.
変数のセットの検証
上記の例は単純に単一の値を検証するだけですが、変数のセットを検証するとしたら?答えはfilterを使うことですvar_array().この関数は、複数の異なるタイプのデータを同時に検証できます.ここではまず簡単な例を示します.
/*** an array of values to filter ***/
$arr = array(10,"109","", "-1234", "some text", "asdf234asdfgs", array());
/*** create an array of filtered values ***/
$filtered_array = filter_var_array($arr, FILTER_VALIDATE_INT);
/*** print out the results ***/
foreach($filtered_array as $key => $value)
{
echo $key.' -- '.$value.'
';
}
?>
上記のコードを実行し、次のように出力します.
0 -- 10
1 -- 109
2 --
3 -- -1234
4 --
5 --
6 -- Array
8進数と16進数
FILTER_VALIDATE_INTフィルタは、8進数と16進数の両方をサポートします.この2つのflagsは、次のとおりです.
FILTER_FLAG_ALLOW_HEX FILTER_FLAG_ALLOW_OCTALは配列を利用してflagsを伝達する
/*** a hex value to check ***/
$hex = "0xff";
/*** filter with HEX flag ***/
echo filter_var($hex, FILTER_VALIDATE_INT, array("flags" => FILTER_FLAG_ALLOW_HEX));
//255
?>
Boolean認証FILTER_VALIDATE_BOOLEAN
/*** test for a boolean value ***/
echo filter_var("true", FILTER_VALIDATE_BOOLEAN);
//1
?>
上のコード出力1は、フィルタが有効なブール値を発見したため、trueを返すことができる他の値がリストされています.
1
“1”
“yes”
“true”
“on”
TRUE
次の値はfalseを返します.
0
“0”
“no”
“false”
“off”
“”
NULL
FALSE
また、次の使い方もサポートされています.
/*** a simple array ***/
$array = array(1,2,3,4,5);
/*** test for a boolean value ***/
echo filter_var(in_array(3, $array), FILTER_VALIDATE_BOOLEAN) ? "TRUE" : "FALSE";
//true
?>
上のコードでは、まずin_を判断しましたarray関数の実行に成功し、trueを返したので、最後にこのコードはtrueを出力します.
配列を渡して配列中の値のbooleanタイプを判断することもできます
/*** a multi dimensional array ***/
$array = array(0, 1, 2, 3, 4, array(0, 1, 2, 3, 4));
/*** create the list of values ***/
$values = filter_var($array, FILTER_VALIDATE_BOOLEAN, FILTER_REQUIRE_ARRAY);
/*** dump the values ***/
var_dump($values);
?>
上のコードは次のように出力されます.
array(6) {
[0] => bool(false)
[1] => bool(true)
[2] => bool(false)
[3] => bool(false)
[4] => bool(false)
[5] => array(5) {
[0] => bool(false)
[1] => bool(true)
[2] => bool(false)
[3] => bool(false)
[4] => bool(false)
}
}
浮動小数点認証FILTER_VALIDATE_FLOAT
配列の浮動小数点型検証
他の検証と同様に、1つの配列に対して浮動小数点型検証を行うこともできます.boolean検証と同様に、flgs FILTER_を提供します.REQUIRE_ARRAY.
上のコード出力は以下の通りです.
array(7) {
[0] => float(1.2)
[1] => float(1.7)
[2] => bool(false)
[3] => float(-23234.123)
[4] => bool(false)
[5] => bool(false)
[6] => array(0) { }
}
浮動小数点フィルタは、数値間の区切り文字を指定することをサポートします.
",",
"1.234" => "..",
"1.2e3" => ","
);
/*** validate the floats against the user defined decimal seperators ***/
foreach ($floats as $float => $dec_sep)
{
$out = filter_var($float, FILTER_VALIDATE_FLOAT, array("options" => array("decimal" => $dec_sep)));
/*** dump the results ***/
var_dump($out);
}
?>
上記のコードでは、$floats関数の最初の要素値は','であるため、1234値を判断する際に区切り記号を','と指定するので、true上のコードの完全な戻り値を返します.
float(1.234)
Warning: filter_var() [function.filter-var]: decimal separator must be one char in /www/filter.php on line 13
bool(false)
bool(false)
URL FILTER_の検証VALIDATE_URL
URLの検証は困難な行為であり、URLの不確実性のため、最大長の制限はなく、そのフォーマットは多様化しており、RFC 1738を読むことでURLに関するいくつかの情報を知ることができます.その後、すべてのipv 4およびipv 6のURL、および他のURLの検証を検証するクラスを作成できます.FILTERも簡単に使えますVALIDATE_URLでURLを検証します.
";
}
?>
上記の例では,与えられたURLが正当であるか否かを簡単なif文で判断しているが,すべてのURLがこのようなフォーマットであるわけではない.URLがIPアドレスである場合もあれば、URLに複数のパラメータが渡されている場合もあります.URLの検証に役立つflagsはいくつかあります.
FILTER_FLAG_SCHEME_REQUIRD�C要求URLはRFC対応URLです.(例:http://cg.am) FILTER_FLAG_HOST_REQUIRD�C要求URLはホスト名を含む(例:http://levi.cg.com) FILTER_FLAG_PATH_REQUIRD、CはURLがホスト名の後に経路が存在することを要求する(例えば:http://levi.cg.am/test/phpmailer/) FILTER_FLAG_QUERY_REQUIRD�CはURLに検索文字列が存在することを要求する(例えば:http://levi.cg.am/?p=2618)
上のコードが検証されていないことがわかります
IPフィルタFILTER_VALIDATE_IP
FILTER_VALIDATE_IPフィルタは値をIPとして検証する.Name:「validate_ip」ID-number:275可能なフラグ:
FILTER_FLAG_IPV 4、C要求値は正当なIPv 4 IP(例えば:255.255.255.255.255)FILTER_FLAG_IPV 6であり、C要求値は正当なIPv 6 IP(例えば:2001:0 db 8:85 a 3:08 d 3:1319:8 a 2 e:0370:7334)FILTER_FLAG_NO_PRIV_RANGEであり、C要求値はRFC指定のプライベートドメインIPである(例えば192.168.0.1)FILTER_FLAG_NO_RES_RANGE、C要求値は保留中のIP範囲内ではない.このフラグはIPV 4とIPV 6の値を受け入れる.EmailフィルタFILTER_VALidate_EMAIL
FILTER_VALIDATE_EMAILフィルタは、値を電子メールアドレスとして検証します.
カスタムフィルタFILTER_CALLBACK
FILTER_CALLBACKフィルタは、ユーザー定義関数を使用して値をフィルタします.
このフィルタは、データフィルタリングの完全な制御を提供します.
指定した関数は、「options」という関連配列に格納する必要があります.
しゅつりょく
Peter_is_a_great_guy!
以上述べたのが本文のすべての内容で、みんなが好きになることを望みます.