本文作者:DurkBlue

http_build_query使用过的一些坑和用法详解

DurkBlue2022-07-251699
http_build_query使用过的一些坑和用法详解摘要: http_build_query — 生成 URL-encode 之后的请求字符串http_build_query ( mixed $query_data , string $nu...

http_build_query — 生成 URL-encode 之后的请求字符串

http_build_query ( mixed $query_data , string $numeric_prefix = ? , string $arg_separator = ? , int $enc_type = PHP_QUERY_RFC1738 ) : string


参数解释:

query_data:可以是数组或包含属性的对象,数组支持多维数组,对象只有公有权限的才会加入结果

numeric_prefix:此参数值将会作为数组中的基础数字下标元素的前缀。

arg_separator:除非指定并使用了这个参数,否则会用 arg_separator.output 来分隔参数。

enc_type:如果 enc_type 是 PHP_QUERY_RFC1738,空格会被编码成加号(+)。如果 enc_type 是 PHP_QUERY_RFC3986,空格会被百分号编码(%20)。默认编码为(+)。


用法举例:

一: 将数组组成请求字符串


$data = array('foo'=>'bar',

              'baz'=>'boom',

              'cow'=>'milk',

              'php'=>'hypertext processor');


echo http_build_query($data);

// 结果如下, 空格被编码为+号

foo=bar&baz=boom&cow=milk&php=hypertext+processor

?>


二:指定参数numeric_prefix的值, 为基础数字下标元素添加前缀


$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');

echo http_build_query($data, 'myvar_');

//结果如下, 数组下标的元素添加上了前缀“myvar_”

myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor


三:将多维数组拼接为请求字符串


$data = array(

  'user'=>array('name'=>'Bob Smith',

  'age'=>47,

  'sex'=>'M',

  'dob'=>'5/12/1956'),

  'pastimes'=>array('golf', 'opera', 'poker', 'rap'),

  'children'=>array('bobby'=>array('age'=>12,'sex'=>'M'),

  'sally'=>array('age'=>8,'sex'=>'F')),

  'CEO');

echo http_build_query($data,"myvar_");

//结果如下,注意只有下标为CEO的基础下标元素添加了前缀,其余数字索引没有如user下标内的数组

user[name]=Bob+Smith&user[age]=47&user[sex]=M&user[dob]=5%1F12%1F1956&

pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap&

children[bobby][age]=12&children[bobby][sex]=M&children[sally][age]=8&

children[sally][sex]=F&myvar_0=CEO


四:将对象内的成员拼接为请求字符串


class parentClass {

    public    $pub      = 'publicParent';

    protected $prot     = 'protectedParent';

    private   $priv     = 'privateParent';

    public    $pub_bar  = Null;

    protected $prot_bar = Null;

    private   $priv_bar = Null;


    public function __construct(){

        $this->pub_bar  = new childClass();

        $this->prot_bar = new childClass();

        $this->priv_bar = new childClass();

    }

}


class childClass {

    public    $pub  = 'publicChild';

    protected $prot = 'protectedChild';

    private   $priv = 'privateChild';

}


$parent = new parentClass();


echo http_build_query($parent);

//结果如下,注意只有公有权限的才能加入结果

pub=publicParent&pub_bar%5Bpub%5D=publicChild

此篇短文由DurkBlue发布,写作不易转载请注明来处
文章投稿或转载声明

来源:DurkBlue版权归原作者所有,转载请保留出处。本站文章发布于 2022-07-25
温馨提示:文章内容系作者个人观点,不代表DurkBlue博客对其观点赞同或支持。

赞(0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

阅读
分享