@ 2013-09-20T06:32:06Z <?php
define('FILTER_STRUCT_FORCE_ARRAY', "\0FILTER_STRUCT_FORCE_ARRAY\0");
function filter_struct_utf8($type, array $default) {
static $is_recursive_static = false;
$is_recursive = $is_recursive_static;
if (!$is_recursive) {
$types = array(
INPUT_GET => $_GET,
INPUT_POST => $_POST,
INPUT_COOKIE => $_COOKIE,
INPUT_REQUEST => $_REQUEST,
INPUT_ENV => $_ENV,
INPUT_SERVER => $_SERVER,
);
$type = (int)$type;
if (!isset($types[$type])) {
return $default;
}
$var = $types[$type];
$is_recursive_static = true;
} else {
$var = $type;
}
$ret = array();
foreach ($default as $key => $value) {
if ($value === FILTER_STRUCT_FORCE_ARRAY) {
$ret[$key] = array();
$arr = isset($var[$key]) ? (array)$var[$key] : array();
foreach ($arr as $k => $v) {
if (is_string($v) && preg_match('//u', $k) && preg_match('//u', $v)) {
$ret[$key][$k] = $v;
}
}
} elseif (!isset($var[$key])) {
$ret[$key] = $value;
} elseif (is_array($value)) {
$ret[$key] = filter_struct_utf8($var[$key], $value);
} elseif (is_array($var[$key]) || !preg_match('//u', $var[$key])) {
$ret[$key] = $value;
} else {
$ret[$key] = $var[$key];
}
}
if (!$is_recursive) {
$is_recursive_static = false;
}
return $ret;
}
// テスト用として代入($_POST['email']は未定義)
$_POST['name'] = array( // 異常な値(本来は文字列で来るはず)
'hahaha' => 'I am an array',
);
$_POST['age'] = '20'; // 正常な値
$_POST['gender'] = 'male'; // 正常な値
$_POST['options] = array(
'b' => 'yes', // 正常な値
'c' => array('hahaha' => 'This is an invalid option'), // 異常な値(本来は配列はネストしないはず)
);
// $_POSTの要素を期待する形になるようにシンボルテーブルにインポートする
extract(filter_struct_utf8(INPUT_POST, array(
'name' => '', // 異常なときは強制的に空文字列にする
'age' => '', // 異常なときは強制的に空文字列にする
'email' => '', // 異常なときは強制的に空文字列にする
'gender' => '', // 異常なときは強制的に空文字列にする
'options' => FILTER_STRUCT_FORCE_ARRAY, // 強制的に一次元配列にする
)));
// 値を見てみる
var_dump($name, $age, $email, $gender, $options);
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 5.4.20 0.005 0.038 12.42 5.4.19 0.017 0.044 12.41 5.4.18 0.020 0.047 12.41 5.4.17 0.017 0.048 12.42 5.4.16 0.021 0.046 12.41 5.4.15 0.020 0.043 12.41 5.4.14 0.018 0.042 12.10 5.4.13 0.012 0.046 12.08 5.4.12 0.014 0.044 12.05 5.4.11 0.011 0.046 12.04 5.4.10 0.013 0.047 12.04 5.4.9 0.011 0.047 12.04 5.4.8 0.016 0.042 12.04 5.4.7 0.011 0.046 12.04 5.4.6 0.016 0.042 12.04 5.4.5 0.020 0.038 12.04 5.4.4 0.015 0.043 12.02 5.4.3 0.016 0.042 12.02 5.4.2 0.014 0.043 12.02 5.4.1 0.022 0.036 12.02 5.4.0 0.023 0.062 11.51 5.3.27 0.014 0.049 12.73 5.3.26 0.018 0.047 12.72 5.3.25 0.013 0.048 12.72 5.3.24 0.015 0.049 12.72 5.3.23 0.019 0.044 12.71 5.3.22 0.021 0.041 12.68 5.3.21 0.015 0.046 12.68 5.3.20 0.017 0.048 12.68 5.3.19 0.021 0.043 12.68 5.3.18 0.019 0.043 12.67 5.3.17 0.023 0.041 12.67 5.3.16 0.020 0.044 12.68 5.3.15 0.017 0.046 12.67 5.3.14 0.016 0.048 12.66 5.3.13 0.019 0.044 12.66 5.3.12 0.017 0.051 12.66 5.3.11 0.020 0.051 12.66 5.3.10 0.018 0.044 12.14 5.3.9 0.015 0.049 12.12 5.3.8 0.015 0.048 12.11 5.3.7 0.032 0.090 12.11 5.3.6 0.021 0.042 12.09 5.3.5 0.021 0.043 12.04 5.3.4 0.018 0.042 12.04 5.3.3 0.018 0.044 12.01 5.3.2 0.015 0.045 11.79 5.3.1 0.019 0.038 11.75 5.3.0 0.018 0.042 11.73
preferences:dark mode live preview
132.29 ms | 1394 KiB | 7 Q