function I($name, $default = '', $filter = null, $datas = null)
{static $_PUT = null;if (strpos($name, '/')) {// 指定修饰符list($name, $type) = explode('/', $name, 2);}if (strpos($name, '.')) {// 指定参数来源list($method, $name) = explode('.', $name, 2);} else {// 默认为自动判断$method = 'param';}switch (strtolower($method)) {case 'get':$input = &$_GET;break;case 'post':$input = &$_POST;break;case 'put':if (is_null($_PUT)) {parse_str(file_get_contents('php://input'), $_PUT);}$input = $_PUT;break;case 'param':switch ($_SERVER['REQUEST_METHOD']) {case 'POST':$input = $_POST;break;case 'PUT':if (is_null($_PUT)) {parse_str(file_get_contents('php://input'), $_PUT);}$input = $_PUT;break;default:$input = $_GET;}break;case 'path':$input = array();if (!empty($_SERVER['PATH_INFO'])) {$depr = '/';$input = explode($depr, trim($_SERVER['PATH_INFO'], $depr));}break;case 'request':$input = &$_REQUEST;break;case 'session':$input = &$_SESSION;break;case 'cookie':$input = &$_COOKIE;break;case 'server':$input = &$_SERVER;break;case 'globals':$input = &$GLOBALS;break;case 'data':$input = &$datas;break;default:return null;}if ('' == $name) {// 获取全部变量$data = $input;$filters = isset($filter) ? $filter : htmlspecialchars($filter);if ($filters) {if (is_string($filters)) {$filters = explode(',', $filters);}foreach ($filters as $filter) {$data = array_map_recursive($filter, $data); // 参数过滤}}} elseif (isset($input[$name])) {// 取值操作$data = $input[$name];$filters = isset($filter) ? $filter : htmlspecialchars($filter);if ($filters) {if (is_string($filters)) {if (0 === strpos($filters, '/')) {if (1 !== preg_match($filters, (string) $data)) {// 支持正则验证return isset($default) ? $default : null;}} else {$filters = explode(',', $filters);}} elseif (is_int($filters)) {$filters = array($filters);}if (is_array($filters)) {foreach ($filters as $filter) {$filter = trim($filter);if (function_exists($filter)) {$data = is_array($data) ? array_map_recursive($filter, $data) : $filter($data); // 参数过滤} else {$data = filter_var($data, is_int($filter) ? $filter : filter_id($filter));if (false === $data) {return isset($default) ? $default : null;}}}}}if (!empty($type)) {switch (strtolower($type)) {case 'a': // 数组$data = (array) $data;break;case 'd': // 数字$data = (int) $data;break;case 'f': // 浮点$data = (float) $data;break;case 'b': // 布尔$data = (boolean) $data;break;case 's':// 字符串default:$data = (string) $data;}}} else {// 变量默认值$data = isset($default) ? $default : null;}return $data;
}