PHPにおけるfilter関数によるデータの検証方法の詳細

11623 ワード

PHPのfilter関数でデータを検証する方法の詳細を説明します.PHPフィルタには、Validationが検証アイテムが正当かどうかを検証するために使用され、Sanitizationが検証アイテムをフォーマットするために使用されるため、検証アイテムの値を変更し、不正な文字を削除する可能性があります.
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!

以上述べたのが本文のすべての内容で、みんなが好きになることを望みます.