zoukankan      html  css  js  c++  java
  • I方法 thinkphp

    function I($name,$default=null,$filter=null,$datas=null) {
    static $_PUT = null;
    $default_filter='htmlspecialchars';
    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 'request' :
    $input =& $_REQUEST;
    break;
    case 'session' :
    $input =& $_SESSION;
    break;
    case 'cookie' :
    $input =& $_COOKIE;
    break;
    case 'server' :
    $input =& $_SERVER;
    break;
    case 'globals' :
    $input =& $GLOBALS;
    break;
    default:
    return null;
    }

    if(''==$name) { // 获取全部变量
    $data = $input;
    $filters = isset($filter)?$filter:$default_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:$default_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){

    // exit;
    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;
    }

    is_array($data) && array_walk_recursive($data,'think_filter');
    return $data;
    }

    function think_filter(&$value){
    // TODO 其他安全过滤

    // 过滤查询特殊字符
    if(preg_match('/^(EXP|NEQ|GT|EGT|LT|ELT|OR|XOR|LIKE|NOTLIKE|NOT BETWEEN|NOTBETWEEN|BETWEEN|NOTIN|NOT IN|IN)$/i',$value)){
    $value .= ' ';
    }
    }
    function array_map_recursive($filter, $data) {
    $result = array();
    foreach ($data as $key => $val) {
    $result[$key] = is_array($val)
    ? array_map_recursive($filter, $val)
    : call_user_func($filter, $val);
    }
    return $result;
    }

  • 相关阅读:
    读写文件时遇到编码问题解决方法
    记录vim经常使用的几个命令
    linux 安装nginx+php+mysql
    php 几种排序模式
    rsync同步的艺术
    关于nuxt项目部署和更新
    springboot使用mybatis时报错Invalid bound statement (not found)
    Springboot 接受前端数据报错 "status": 415,"error": "Unsupported Media Type"
    youtube网页版 评论显示不出来
    [SPDK/NVMe存储技术分析]015
  • 原文地址:https://www.cnblogs.com/liuwenbohhh/p/5259194.html
Copyright © 2011-2022 走看看