0

私のコードがより安全であることを確認するために次の行を使用する方が良い場合はどれですか。filter_var関数のsettype関数を使用する必要がありますか?

settype($number,'integer') 

また

filter_var($number, FILTER_SANITIZE_NUMBER_INT);

ありがとう

4

2 に答える 2

2

ドキュメントに書かれているようにFILTER_SANITIZE_NUMBER_INT

数字、プラス記号、マイナス記号を除くすべての文字を削除します。

したがって、たとえば、SQLクエリでIDが使用されることを期待している場合は、正規表現を使用して、数字しかないことを確認します/^[0-9]+$/。これは、このコンテキストでは意味がないことをFILTER_SANITIZE_NUMBER_INT許可するためです。-12

filter_varとsettypeの主な違いは、一方が変数を文字列として解析して文字列を返し、もう一方がそれを整数にキャストすることです。

$string = "+12";
var_dump(filter_var($string, FILTER_SANITIZE_NUMBER_INT));
settype($string, "integer");
var_dump($string);

出力:

string(3) "+12"
int(12)

したがって、それは実際にはコンテキストに依存します。

于 2012-09-09T03:04:27.550 に答える
-3

settype(int)よりも優れていfilter_varます。filter_var多くの論理的判断があるからです。

于 2012-09-09T02:49:24.980 に答える