thinkphp 输入变量
在Web开发过程中,我们经常需要获取系统变量或者用户提交的数据,这些变量数据错综复杂,而且一不小心就容易引起安全隐患,但是如果利用好ThinkPHP提供的变量获取功能,就可以轻松的获取和驾驭变量了。
大理石平台规格
获取变量
虽然你仍然可以在开发过程中使用传统方式获取各种系统变量,例如:
$id = $_GET['id'];// 获取get变量$name = $_POST['name'];// 获取post变量$value = $_SESSION['var'];// 获取session变量$name = $_COOKIE['name'];// 获取cookie变量$file = $_SERVER['PHP_SELF'];// 获取server变量
但是我们不建议直接使用传统方式获取,因为没有统一的安全处理机制,后期如果调整的话,改起来会比较麻烦。所以,更好的方式是在框架中统一使用I函数进行变量获取和过滤。
I方法是ThinkPHP用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:
I('变量类型.变量名/修饰符',['默认值'],['过滤方法'],['额外数据源'])
变量类型是指请求方式或者输入类型,包括:
| 变量类型 | 含义 |
|---|---|
| get | 获取GET参数 |
| post | 获取POST参数 |
| param | 自动判断请求类型获取GET、POST或者PUT参数 |
| request | 获取REQUEST 参数 |
| put | 获取PUT 参数 |
| session | 获取 $_SESSION 参数 |
| cookie | 获取 $_COOKIE 参数 |
| server | 获取 $_SERVER 参数 |
| globals | 获取 $GLOBALS参数 |
| path | 获取 PATHINFO模式的URL参数(3.2.2新增) |
| data | 获取 其他类型的参数,需要配合额外数据源参数(3.2.2新增) |
注意:变量类型不区分大小写。
变量名则严格区分大小写。
默认值和过滤方法均属于可选参数。变量修饰符是3.2.3版本新增
我们以GET变量类型为例,说明下I方法的使用:
echo I('get.id');// 相当于 $_GET['id']echo I('get.name');// 相当于 $_GET['name']
支持默认值:
echo I('get.id',0);// 如果不存在$_GET['id'] 则返回0echo I('get.name','');// 如果不存在$_GET['name'] 则返回空字符串
采用方法过滤:
// 采用htmlspecialchars方法对$_GET['name'] 进行过滤,如果不存在则返回空字符串echo I('get.name','','htmlspecialchars');
支持直接获取整个变量类型,例如:
// 获取整个$_GET 数组I('get.');
用同样的方式,我们可以获取post或者其他输入类型的变量,例如:
I('post.name','','htmlspecialchars');// 采用htmlspecialchars方法对$_POST['name'] 进行过滤,如果不存在则返回空字符串I('session.user_id',0);// 获取$_SESSION['user_id'] 如果不存在则默认为0I('cookie.');// 获取整个 $_COOKIE 数组I('server.REQUEST_METHOD');// 获取 $_SERVER['REQUEST_METHOD']
param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如:
echo I('param.id');
如果当前请求类型是GET,那么等效于 $_GET['id'],如果当前请求类型是POST或者PUT,那么相当于获取 $_POST['id'] 或者 PUT参数id。
由于param类型是I函数默认获取的变量类型,因此事实上param变量类型的写法可以简化为:
I('id');// 等同于 I('param.id')I('name');// 等同于 I('param.name')
3.2.2新增了path和data两个变量类型,用法如下:
path类型变量可以用于获取URL参数(必须是PATHINFO模式参数有效,无论是GET还是POST方式都有效),例如: 当前访问URL地址是 http://serverName/index.php/New/2013/06/01
那么我们可以通过
echo I('path.1');// 输出2013echo I('path.2');// 输出06echo I('path.3');// 输出01
data类型变量可以用于获取不支持的变量类型的读取,例如:
I('data.file1','','',$_FILES);
变量过滤
如果你没有在调用I函数的时候指定过滤方法的话,系统会采用默认的过滤机制(由DEFAULT_FILTER配置),事实上,该参数的默认设置是:
// 系统默认的变量过滤机制'DEFAULT_FILTER'=>'htmlspecialchars'
也就说,I方法的所有获取变量如果没有设置过滤方法的话都会进行htmlspecialchars过滤,那么:
// 等同于 htmlspecialchars($_GET['name'])I('get.name');
同样,该参数也可以设置支持多个过滤,例如:
'DEFAULT_FILTER'=>'strip_tags,htmlspecialchars'
设置后,我们在使用:
// 等同于 htmlspecialchars(strip_tags($_GET['name']))I('get.name');
如果我们在使用I方法的时候 指定了过滤方法,那么就会忽略DEFAULT_FILTER的设置,例如:
// 等同于 strip_tags($_GET['name'])echo I('get.name','','strip_tags');
I方法的第三个参数如果传入函数名,则表示调用该函数对变量进行过滤并返回(在变量是数组的情况下自动使用array_map进行过滤处理),否则会调用PHP内置的filter_var方法进行过滤处理,例如:
I('post.email','',FILTER_VALIDATE_EMAIL);
表示 会对$_POST['email'] 进行 格式验证,如果不符合要求的话,返回空字符串。 (关于更多的验证格式,可以参考 官方手册的filter_var用法。) 或者可以用下面的字符标识方式:
I('post.email','','email');
可以支持的过滤名称必须是filter_list方法中的有效值(不同的服务器环境可能有所不同),可能支持的包括:
intbooleanfloatvalidate_regexpvalidate_urlvalidate_emailvalidate_ipstringstrippedencodedspecial_charsunsafe_rawemailurlnumber_intnumber_floatmagic_quotescallback
3.2.3版本开始支持进行正则匹配过滤,例如:
// 采用正则表达式进行变量过滤I('get.name','','/^[A-Za-z]+$/');I('get.id',0,'/^\d+$/');
如果正则匹配不通过的话,则返回默认值。
在有些特殊的情况下,我们不希望进行任何过滤,即使DEFAULT_FILTER已经有所设置,可以使用:
// 下面两种方式都不采用任何过滤方法I('get.name','','');I('get.id','',false);
一旦过滤参数设置为空字符串或者false,即表示不再进行任何的过滤。
变量修饰符
3.2.3版本开始,I函数支持对变量使用修饰符功能,可以更好的过滤变量。
用法如下: I('变量类型.变量名/修饰符');
例如:
I('get.id/d');I('post.name/s');I('post.ids/a');
可以使用的修饰符包括:
| 修饰符 | 作用 |
|---|---|
| s | 强制转换为字符串类型 |
| d | 强制转换为整形类型 |
| b | 强制转换为布尔类型 |
| a | 强制转换为数组类型 |
| f | 强制转换为浮点类型 |
thinkphp 输入变量的更多相关文章
- 从" ThinkPHP 开发规范 "看 PHP 的命名规范和开发建议
稍稍水一篇博客,摘抄自Think PHP 的开发规范,很有引导性,我们可以将这些规范实践到原生 PHP 中. 命名规范 使用ThinkPHP开发的过程中应该尽量遵循下列命名规范: 类文件都是以.cla ...
- thinkphp中I方法
概述 正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:I('变量类型 ...
- ThinkPHP I方法
ThinkPHP的I方法是3.1.3版本新增的,如果你是之前的3.*版本的话,可以直接参考使用3.1快速入门教程系列的变量部分. 概述 正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新 ...
- Thinkphp单字母函数使用指南
Thinkphp单字母函数使用指南A方法A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称')最简单的用法: $User = A('User'); 复制代码 ...
- ThinkPHP函数详解:I方法
ThinkPHP的I方法是3.1.3版本新增的,如果你是之前的3.*版本的话,可以直接参考使用3.1快速入门教程系列的变量部分. 概述 正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新 ...
- ThinkPHP函数详解系列
为了能方便大家学习和掌握,在这里汇总下ThinkPHP中的经典函数用法 A 函数:实例化控制器R 函数:直接调用控制器的操作方法C 函数:设置和获取配置参数L 函数:设置和获取语言变量D 函数:实例化 ...
- Thinkphp 控制器
控 制 器: 1.命名方法:新建一个主页面的控制器 controller文件夹下新建一个文件,命名为:MainController.class.php首字母都大写,称为驼峰命名法 eg: <?p ...
- ThinkPHP - I 函数
ThinkPHP函数详解:I方法 浏览:144722 发布日期:2013/06/01 分类:文档教程 关键字: 函数 ThinkPHP的I方法是3.1.3版本新增的,如果你是之前的3.*版本的话, ...
- thinkphp中各字母代表的发放和具体实例
hinkphp单字母函数使用指南A方法 A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称') 最简单的用法: $User = A('User'); 复制代码 ...
随机推荐
- C语言指针和字符串
#include <stdio.h> int main() { /********************************************* * 内存: * 1.常量区 * ...
- metasploit5配置数据库
#踩坑:Please run msfdb as a non-root user apt-get install postgresql #安装数据库 service postgresql start # ...
- vue 监听的使用
watch:{ 监听的属性:function(旧值,新值) { } } 代码: <!DOCTYPE html> <html lang="en" ...
- notepad++去换行(简单、快捷)
文本处理问题 这个方式可以快捷处理, 不用Linux命令, linux 与window之间的文件转换很烦人, 这个方法可以处理
- Keepalived+LVS+nginx搭建nginx高可用集群
1. 环境准备 1. VMware; 2. 4台CentOs7虚拟主机:192.168.122.248,192.168.122.68, 192.168.122.110, 192.168.122.167 ...
- leetcode-159周赛-5231-删除子文件夹
题目描述: 自己的提交: class Solution: def removeSubfolders(self, folder: List[str]) -> List[str]: d = {} r ...
- leetcood学习笔记-88-合并两个有序数组
题目描述: 第一次提交: class Solution: def merge(self, nums1: List[int], m: int, nums2: List[int], n: int) -&g ...
- php基本,输出 ,变量
<?php //php开头//单行注释/*多行注释*/ echo "hello word";//输出 方式连续输出多个字符串print"hello word&q ...
- Element-UI 的树列表实现单选
1. Element-UI 的 el-tree 组件当设置了 show-checkbox 属性以后,默认是只能多选的,如果我们想要将其改选为单选,就要进行一些特殊的处理,首先看效果图. 2. 组件代码 ...
- 今天工作整整一个月了,来记录一下(web前端)
25号,工作整整一个月了,时光飞逝, 这一个月以来,无论是工作上还是生活上,都让我成长了很多,也多了些对人生的思考… 先回顾一下找工作的那段时间吧年前找工作有多辛酸,年后找工作就有多幸运那段日子,我这 ...