PHP Conference Japan 2024

過濾函式

目錄

新增筆記

使用者貢獻的筆記 2 則筆記

4
vojtech at x dot cz
17 年前
另請注意,即使您稍後在腳本中更改了超全域變數($_GET、$_POST 等)的值,過濾函數也只會使用傳遞給腳本的原始變數值。

<?php
echo filter_input(INPUT_GET, 'var'); // 顯示 'something'
echo $_GET['var']; // 顯示 'something'
$_GET['var'] = 'changed';
echo
filter_input(INPUT_GET, 'var'); // 顯示 'something'
echo $_GET['var']; // 顯示 'changed'
?>

事實上,在腳本處理之前,外部數據會在 SAPI 中複製,而過濾函數不再使用超全域變數(如下方過濾器教學的「它是如何運作的?」章節所述)。
0
fumble1 at web dot de
17 年前
我建議您使用 FILTER_REQUIRE_SCALAR(或 FILTER_REQUIRE_ARRAY)標記,因為您可以使用陣列括號來存取字串偏移量和陣列元素,然而,這不僅會導致非預期的行為。請看這個例子

<?php
$image
= basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_FLAG_STRIP_LOW));
// 進一步檢查
?>

/script.php?src[0]=foobar 會導致警告。 :-(
因此我的建議是

<?php
$image
= basename(filter_input(INPUT_GET, 'src', FILTER_UNSAFE_RAW, FILTER_REQUIRE_SCALAR | FILTER_FLAG_STRIP_LOW));
// 進一步檢查
?>
To Top