Apabila menapis data input pengguna, anda biasanya menulis kaedah anda sendiri untuk membuat pertimbangan
Sebagai contoh, gunakan ungkapan biasa semasa mengesahkan e-mel
$pattern = "/\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/"; if (!preg_match($pattern, $email)) { throw new \Exception(self::ERROR_PARAMETER_EMPTY . '_邮件格式有误:' . $email); }
Jika saya tidak menggunakan ungkapan biasa, adakah terdapat kaedah mudah lain?
Gunakan fungsi berkaitan penapis
filter_has_var(type, variable) sama ada terdapat pembolehubah jenis yang ditentukan.
filter_input mengambil input dari luar skrip dan menapisnya.
filter_input_array mendapat berbilang input dari luar skrip dan menapisnya.
filter_var mendapat pembolehubah dan menapisnya.
filter_var_array mendapat berbilang pembolehubah dan menapisnya.
filter_has_var
Tentukan sama ada hasil $_GET mengandungi nama
if(!filter_has_var(INPUT_GET, "name")) { echo("name 不存在"); } else { echo("name 存在"); }
filter_input
Lihat contoh pengesahan e-mel
if (!filter_input(INPUT_GET, 'email', FILTER_VALIDATE_EMAIL)) { echo "E-Mail is not valid"; } else { echo "E-Mail is valid"; }
filter_input_array
Tapis keseluruhan sumber input
$filters = array ( "name" => array ( "filter"=>FILTER_CALLBACK, "flags"=>FILTER_FORCE_ARRAY, "options"=>"ucwords" ), "age" => array ( "filter"=>FILTER_VALIDATE_INT, "options"=>array ( "min_range"=>1, "max_range"=>120 ) ), "email"=> FILTER_VALIDATE_EMAIL, ); print_r(filter_input_array(INPUT_POST, $filters));
filter_var, filter_var_array
Tiada sumber input diperlukan, tapis nilai terus
if(!filter_var("someone@example....com", FILTER_VALIDATE_EMAIL)) { echo("E-mail is not valid"); } else { echo("E-mail is valid"); }
Julat sumber input
Pengesahan
Lain-lain Kaedah penapisan
strip_tags Padam teg html
htmlentiti Tukar aksara kepada entiti HTML (ia juga terlepas daripada simbol mata wang seperti euro, paun, dsb., simbol hak cipta, dsb.)
fungsi htmlspecialchars menukar aksara yang dipratentukan Tukar kepada entiti HTML. Aksara yang dipratentukan untuk
ialah:
& (ampersand) menjadi &
" (petikan berganda) menjadi "
' (petikan tunggal) menjadi '
<
(lebih besar daripada) menjadi>
*Petua: Untuk menukar entiti HTML khas kembali kepada aksara, gunakan fungsi htmlspecialcharsdecode().
$input = "<span>我是标题</span>"; echo htmlspecialchars($input) . "\n"; echo htmlentities($input) . "\n"; echo strip_tags($input) . "\n"; $input = "-- 'select * from "; echo addslashes($input) . "\n";