私のコードがより安全であることを確認するために次の行を使用する方が良い場合はどれですか。filter_var関数のsettype関数を使用する必要がありますか?
settype($number,'integer')
また
filter_var($number, FILTER_SANITIZE_NUMBER_INT);
ありがとう
私のコードがより安全であることを確認するために次の行を使用する方が良い場合はどれですか。filter_var関数のsettype関数を使用する必要がありますか?
settype($number,'integer')
また
filter_var($number, FILTER_SANITIZE_NUMBER_INT);
ありがとう
ドキュメントに書かれているように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)
したがって、それは実際にはコンテキストに依存します。
settype
と(int)
よりも優れていfilter_var
ます。filter_var
多くの論理的判断があるからです。