PHP フィルターには 2 つのタイプが含まれます
検証: 検証項目が合法かどうかを検証するために使用されます
サニタイズ: 検証された項目をフォーマットするために使用され、検証項目の値を変更したり、不正な文字を削除したりする可能性があります。
input_filters_list() 関数は、現在のシステムでサポートされているすべてのフィルターをリストするために使用されます。
1 <table>2 <tr><td>Filter Name</td><td>Filter ID</td></tr>3 <?php4 foreach(filter_list() as $id =>$filter)5 {6 echo '<tr><td>'.$filter.'</td><td>'.filter_id($filter).'</td></tr>'."\n";7 }8 ?>9 </table>
上記のコードは次の情報を出力します
フィルター名フィルターID
int 257
boolean 258
float 259
validate_regexp 272
validate_url 273
validate_email 274
validate_ip 275
文字列 513
ストリップ 513
エンコード 514
special_chars 515
unsafe_raw 516
email 517
url 518
number_int 519
number_float 520
magic_quotes 521
callback 1024
各フィルターには一意の ID があります。ここでの各フィルターは、filter_var() 関数で使用できます。以下にその使い方を一つずつ紹介していきます。上記の文字列と StrippedID が同じであることに注意してください。これは、これらが同じフィルターであるか、同じフィルターの単なる 2 つのエイリアスであるためです。
データをフィルタリングする
filter_var() メソッドを使用してデータをフィルタリングします。 以下は簡単なフィルタリングの例です。今回は、$int 変数の内容を変更します
1 <?php2 3 /*** an integer to check ***/4 $int = 1234;5 /*** validate the integer ***/6 echo filter_var($int, FILTER_VALIDATE_INT);7 //12348 ?>
このときコードを実行すると、変数の出力がないことが分かりました。これは、$in 変数が検証を通過していないためです。ブール値 (偽) を返します。同時に、$int='' の場合でも bool(false) が返されることに注意してください
整数検証
上記のいくつかのコードは、指定された値が整数であるかどうかを単純に検証します。実際、FILTER_VALIDATE_INT は数値範囲の検証も提供します。変数を検証し、それが整数であるかどうかを判断し、その値が 50 から 100 の間であるかどうかを検証してみましょう
1 <?php2 3 /*** an integer to check ***/4 $int = 'abc1234';5 /*** validate the integer ***/6 echo filter_var($int, FILTER_VALIDATE_INT);7 8 ?>
上記のコードを実行して、42 を見つけてください。と出力されましたが、エラーは見つかりませんでした。これはなぜでしょうか?検証に追加の検証ルールを追加したい場合は、次のように 'options' キーを含む配列を渡す必要があることがわかりました。
1 <?php 2 /*** an integer to check ***/ 3 $int = 42; 4 /*** lower limit of the int ***/ 5 $min = 50; 6 /*** upper limit of the int ***/ 7 $max = 100; 8 9 /*** validate the integer ***/10 echo filter_var($int, FILTER_VALIDATE_INT, array("min_range"=>$min, "max_range"=>$max));11 //4212 ?>
上記のコードを実行すると、ページには何も含まれません。上記は false を返し、検証が成功したことを示しているため、出力されます。このメソッドは、負の数値の範囲検証を実行するために使用することもできます。このメソッドは、単一の範囲値もサポートしています。つまり、
1 <?php 2 /*** an integer to check ***/ 3 $int = 42; 4 /*** lower limit of the int ***/ 5 $min = 50; 6 /*** upper limit of the int ***/ 7 $max = 100; 8 9 /*** validate the integer ***/10 echo filter_var($int, FILTER_VALIDATE_INT, array("options" => array("min_range"=>$min, "max_range"=>$max)));11 12 ?>
などの最大値または最小値の範囲を指定するだけです。 $int が $min より大きい (等しい整数型の値を除く) 場合、コードを実行し、12 を出力します
上記の例は単に単一の値を検証しているだけですが、変数のセットが検証された場合はどうなるでしょうか?答えは、filter_var_array() を使用することです。複数の異なる種類のデータを同時に検証できる機能です。これは簡単な例です
<?php/*** 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?>
上記のコードを実行すると、出力は次のようになります
1 -- 109
2 --3 -- -1234
4 --5 --
6 -- 配列
FILTER_VALIDATE_INT フィルターは、8 進数と 16 進数の両方をサポートします。これらの 2 つのフラグは、
FILTER_FLAG_ALLOW_HEX
FILTER_FLAG_ALLOW_OCTAL
フラグを渡すには配列を使用します
1 <?php 2 3 /*** an array of values to filter ***/ 4 $arr = array(10,"109","", "-1234", "some text", "asdf234asdfgs", array()); 5 6 /*** create an array of filtered values ***/ 7 $filtered_array = filter_var_array($arr, FILTER_VALIDATE_INT); 8 9 /*** print out the results ***/10 foreach($filtered_array as $key=>$value)11 {12 echo $key.' -- '.$value.'<br />';13 }14 ?>