GPF之获取GET,POST数据

GPF提供了一套函数用于获取GET,POST数据.通过GPF可以从$_REQUEST,$_GET,$_POST中取得指定的数据.并自动进行部份安全过滤.
GPF把浏览器提交的数据分成5类:
* 转义,会使用htmlspecialchars转义HTML特殊字符,GPF默认使用此类型.
* 整数,会使用intval转换为整数类型.
* 小数,会使用floatval转换为浮点数类型.
* 纯文本,会使用strip_tags过滤掉html标签.
* HTML,即允许html标签,会进行简单的xss过滤.

通过使用gpfi,gpfi_int,gpfi_float,gpfi_txt,gpfi_html五个函数可以从$_REQUEST数组中分别取出上述五种类型的数据,若需要取得原始的输入数据,可以使用gpfi_in.
它们的函数原型都是一样的:
mixed gpfi($name, $def_val = NULL, $option = array())
$name 为所需的键名, $def_val 表示对应键名不存在时所使用的默认值, $option 用于指定附加参数,可以控制是否转义引号和返回数据是否为数组.

**使用示例**:
取$_REQUEST['name']的值:`gpfi('name')`.
如果要取的值不存在(!isset)时使用`1`作为默认值:`gpfi('name', 1)`.
若取的值为空(empty)时使用`1`作为默认值:`gpfi('name', array(1, 'empty'))`.
更多关于填允默认值的方式参见 gpfif_default_value 函数的注释和实现.

上面的调用形式,若要取的值为一个数组,会自动递归进行处理,比如:
`gpfi_int('name')`
当$_REQUEST['name']的值是一个数组,那么数组中的所有值都会被格式化为整数.可以通过$option参数控制gpfi系列函数如何处理数组:
自动递归处理(默认):`gpfi('name', NULL, array('@'))`.
强制转换为数据:`gpfi('name', NULL, array('@@'))`.
gpfi会把所取的'name'强制转换为数组数据类型.
强制不允许为数组:`gpfi('name', NULL, array('!@'))`.
若所取的'name'为数组,gpfi会把值强制转换为待返回的数据类型,这里将会是字符串,gpfi_int则为整数.

默认情况下,gpfi系列函数会返回经过引号转义的数据,通过$option参数可以控制gpfi系列函数返回未经引号转义的数据:
`gpfi('name', NULL, array('!\\'))`

若需要只从$_GET中获取数据,可以使用gpfig函数,它们包括:
gpfig,gpfig_int,gpfig_float,gpfig_txt,gpfig_html,gpfig_in.
除了是从$_GET中获取数据外,其余与gpfi一样.

若需要只从$_POST中获取数据,可以使用gpfip函数,它们包括:
gpfip,gpfip_int,gpfip_float,gpfip_txt,gpfip_html,gpfip_in.

有时候,需要对提交的一个数组进行不同的处理,比如:
`$_REQUEST['name'] = array('reqint' => 1, 'reqhtml' => 'html', 'reqtxt' => 'txt');`
reqint键值需要为整数,reqhtml键值需要为html代码,reqtxt键值需要为纯文本.
这时,可以使gpfi_array函数设置'name'作为数组处理,然后就可以使用gpfi系列函数对数组中的键值进行不同的处理了,最后使用gpfi_get函数取得处理结果:
```php
gpfi_array('name');
gpfi_int('reqint');
gpfi_html('reqhtml');
gpfi_txt('txt');
$data = gpfi_get();
```
若待处理的数组只能从$_GET中取,可以使用gpfig_array函数设置,只能从$_POST中取则使用gpfip_array函数设置.
需要注意的是,无论用哪个函数设置待处理的数组后,都是使用gpfi类函数来进行分别处理,不能使用gpfip和gpfig类函数.

取得处理结果也都是使用gpfi_get函数.gpfi_get有一个函数参数:
mixed gpfi_get($is_auto_all = true)
若$is_auto_all为true(默认为true),则会把未显式声名的键默认按 gpfi 处理.若为false则未显式声名的键全部丢弃.

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页