PHP:http_build_query

http_build_query —生成URL编码的查询字符串


 

描述

http_build_query ( mixed $data , string $numeric_prefix = ? , string $arg_separator = ? , int $encoding_type = PHP_QUERY_RFC1738 ) : string

从提供的关联(或索引)数组生成URL编码的查询字符串。

 

参数

data

  可以是包含属性的数组或对象。

  如果data是数组,则可能是简单的一维结构,也可能是数组的数组(而数组又可能包含其他数组)。

  如果data是对象,则仅将公共属性合并到结果中。

numeric_prefix

  如果在基本数组中使用了数字索引,并且提供了此参数,则它将仅在基本数组中的元素的数字索引之前。

  这是为了在以后由PHP或其他CGI应用程序解码数据时允许使用合法的变量名。

arg_separator

       arg_separator.output 用于分隔参数,但可以通过指定此参数来覆盖。

encoding_type

  默认情况下,PHP_QUERY_RFC1738

  如果encoding_type为 PHP_QUERY_RFC1738,则按照»RFC 1738和 application/x-www-form-urlencoded媒体类型执行编码 ,这意味着空格被编码为加号(+)。

  如果encoding_type为 PHP_QUERY_RFC3986,则根据»RFC 3986执行编码,并且空格将按百分比编码(%20)。

 

返回值

  返回URL编码的字符串。

 

例子

Example#1 http_build_query()的简单用法

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

echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&amp;');

?>

上面的示例将输出:

foo = bar&baz = boom&cow = milk&php = Hypertext + processor
foo = bar&amp; baz = boom&amp; cow = milk&amp; php =超文本+处理器

Example#2 具有数字索引元素的http_build_query()

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

echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>

上面的示例将输出:

0 = foo&1 = bar&2 = baz&3 = boom&cow = milk&php =超文本+处理器
myvar_0 = foo&myvar_1 = bar&myvar_2 = baz&myvar_3 = boom&cow = milk&php =超文本+处理器

Example#3 具有复杂数组的http_build_query()

<?php
$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, 'flags_');
?>

这将输出:(为便于阅读而包装了单词)

user%5Bname%5D = Bob + Smith&user%5Bage%5D = 47&user%5Bsex%5D = M&
user%5Bdob%5D = 5%2F12%2F1956&pastimes%5B0%5D = golf&pastimes%5B1%5D = opera&
娱乐活动%5B2%5D =扑克和玩者的时光%5B3%5D =说唱和孩子%5Bbobby%5D%5Bage%5D = 12&
children%5Bbobby%5D%5Bsex%5D = M&children%5Bsally%5D%5Bage%5D = 8&
儿童%5Bsally%5D%5Bsex%5D = F&flags_0 = CEO

注意事项

基本数组“ CEO”中只有数字索引元素会收到前缀。在娱乐方式下找到的其他数字索引不需要字符串前缀即可成为合法变量名称。

Example#4 将http_build_query()与对象一起使用

<?php
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
posted @ 2021-05-24 10:12  我又无所求  阅读(1277)  评论(0)    收藏  举报