Kann ich nur empfehlen.
Warum?
GET/POST vars kommen immer als String rein. Bei typen starken Vergleichen (x === y) kann das ungewollte Ergebnisse bringen.
Was macht das?
2 functions:
set_numeric_type() val rein, und wenn es numerisch ist, kommt ein int/bigint/... raus. (Achtung: 0010 zB wird zu 10 !)
arrayWalkRecursiveCallUserFunc() array rekursiv durchlaufen und call_user_func() auf jeden Wert anwenden (je länger der Name einer Funktion, desto besser muss sie sein =)
Bsp und functions:
PHP
function set_numeric_type($val)
{
$types = array('integer','float');
// EDITED 10 06 2014 if(is_numeric($val)and (!is_int($val)or !is_float($val))){
if(is_numeric($val)and is_string($val)){
foreach($types as $type){
$temp = $val;
if(settype($temp,$type)and $temp == $val){
return $temp;
}
}
}
return $val;
}
function arrayWalkRecursiveCallUserFunc($arr,$functions)
{
if(!function_exists('byref')){
function byref(&$val,&$key,$functions){
foreach($functions as $function_name){
$val = call_user_func($function_name,$val);
}
}
}
$functions = (!is_array($functions))?array($functions):$functions;
array_walk_recursive($arr,"byref",$functions);
return $arr;
}
# simulate get (or just add ?a=1 to your url):
$_GET['a'] = '1'; // string(1) "1"
$_GET = arrayWalkRecursiveCallUserFunc($_GET,array('trim','set_numeric_type'));
$_POST = arrayWalkRecursiveCallUserFunc($_POST,array('trim','set_numeric_type'));
var_dump($_GET['a']); // int(1)
Alles anzeigen
Wie bereits erwähnt: Achtung: 0010 zB wird zu 10 !