PHP 過濾器擴展專為驗證與淨化外部輸入設計,是 Web 應用安全的第一道防線。外部數據來源包括:表單輸入、Cookies、Web Services、服務器變量、資料庫查詢結果等。
| 函數 | 用途 |
|---|---|
filter_var() | 單一變量過濾 |
filter_var_array() | 多變量批量過濾 |
filter_input() | 獲取並過濾單一輸入變量 |
filter_input_array() | 批量獲取並過濾輸入變量 |
$int = 123;
if (!filter_var($int, FILTER_VALIDATE_INT)) {
echo "非法整數";
} else {
echo "合法整數";
}
FILTER_VALIDATE_INT、FILTER_VALIDATE_EMAIL、FILTER_VALIDATE_URL、FILTER_VALIDATE_IP 等FILTER_SANITIZE_STRING、FILTER_SANITIZE_EMAIL、FILTER_SANITIZE_URL、FILTER_SANITIZE_NUMBER_INT 等$var = 300;
$options = ['options' => ['min_range' => 0, 'max_range' => 256]];
if (!filter_var($var, FILTER_VALIDATE_INT, $options)) {
echo "超出範圍"; // 300 > 256,輸出此訊息
}
if (!filter_has_var(INPUT_GET, 'email')) {
echo "無 email 參數";
} elseif (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL)) {
echo "非法 Email";
} else {
echo "合法 Email";
}
if (filter_has_var(INPUT_GET, 'url')) {
$url = filter_input(INPUT_GET, 'url', FILTER_SANITIZE_URL);
echo $url; // 移除非法字符
}
$filters = [
'name' => ['filter' => FILTER_SANITIZE_STRING],
'age' => ['filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 1, 'max_range' => 120]],
'email' => FILTER_VALIDATE_EMAIL
];
$result = filter_input_array(INPUT_GET, $filters);
if (!$result['age']) echo "年齡需 1-120";
elseif (!$result['email']) echo "Email 非法";
else echo "輸入正確";
function convertSpace($str) {
return str_replace('_', '.', $str);
}
$string = "www_runoob_com!";
echo filter_var($string, FILTER_CALLBACK, ['options' => 'convertSpace']);
// 輸出:www.runoob.com!
也可直接使用內建函數作為回調,如 ['options' => 'strtoupper']。