[英]Does chaining filter_input() and filter_var() cause the problem?
[英]When is filter_input() used versus filter_var()?
我傳統上使用filter_var()
函數來清理$_GET
和$_POST
數據,例如:
$foo = filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);
但是 PHP 也有一個函數filter_input()
,它有不同的語法來完成同樣的事情:
$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);
這些只是同義詞嗎? 使用一個比另一個有優勢嗎?
我檢查了手冊頁,但我沒有看到很多區別(僅報告是否/如何報告錯誤)。 語義/最佳實踐,什么最有意義?
主要區別之一是它們如何處理未定義的變量/索引。 如果$_GET['foo']
不存在:
$foo = filter_var($_GET['foo'], FILTER_SANITIZE_NUMBER_INT);
返回一個空字符串""
並生成:
注意:未定義索引:foo
因此,您通常需要將其包裝在if(isset($_GET['foo']))
。
鑒於:
$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);
返回NULL
並且不會產生錯誤。
注意: filter_input
函數不對當前的$_GET
和$_POST
超全局變量進行操作,而是預先填充並獨立於這些數組。
如果$_GET['foo']
不存在但在腳本中創建,則filter_input
將看不到它:
$_GET['foo'] = 1;
$foo = filter_input(INPUT_GET, 'foo', FILTER_SANITIZE_NUMBER_INT);
將返回null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.