Scusate mi sono accorto di aver scritto una castroneria riguardo l'uso di "settype()"...
Questo è il codice corretto:
Codice PHP:
function parse_input($source, $expected) {
$result = array();
foreach ( $source AS $key => $value ) {
if ( is_array($value) ) {
$result[$key] = parse_input($value, $expected[$key]);
} else {
if ( isset($expected[$key]) ) {
switch ( $expected[$key] ) {
case 'bool':
case 'boolean':
settype($value, 'boolean'); break;
case 'int':
case 'integer':
settype($value, 'integer'); break;
case 'float':
case 'double':
settype($value, 'float'); break;
case 'mysql':
case 'string':
$value = mysql_real_escape_string($value); break;
default:
$value = htmlentities($value); break;
}
$result[$key] = $value;
} else {
$result[$key] = addslashes($value);
}
}
}
return $result;
}
e questo un esempio, semplice, d'uso:
Codice PHP:
function myFunc($in) {
$expected = array(
'id' => 'integer',
'nome' => 'string',
'text' => 'string',
'arr' => array (
'ar1' => 'integer',
'ar2' => 'integer',
'ar3' => 'string'
)
);
$get = parse_input($in, $expected);
print "<pre>";
print_r($get);
print "</pre>";
}
$in = array(
"id" => "7dsf",
"nome" => "Albert'o",
"text" => "Oggi sono andato all'albergo sul \"mare\"",
"arr" => array(
"ar1" => "0",
"ar2" => "3'''4930",
"ar3" => "prrrr'annzo\'\'\'o"
)
);
myFunc($in);
ad ogni modo è sicuramente migliorabile...