(PHP 5, PHP 7, PHP 8)
http_build_query — 生成 URL-encode 之后的请求字符串
$data
,$numeric_prefix
= "",$arg_separator
= null
,$encoding_type
= PHP_QUERY_RFC1738
使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。
data
可以是数组或包含属性的对象。
如果 data
是数组,可以是一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。
如果 data
是一个对象,只有 public 的属性会加入结果。
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 编码后的字符串。
示例 #1 http_build_query() 使用示例
<?php
$data = array(
'foo' => 'bar',
'baz' => 'boom',
'cow' => 'milk',
'null' => null,
'php' => 'hypertext processor'
);
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');
?>
以上例程会输出:
foo=bar&baz=boom&cow=milk&php=hypertext+processor foo=bar&baz=boom&cow=milk&php=hypertext+processor
示例 #2 http_build_query() 使用数字下标的元素
<?php
$data = array('foo', 'bar', 'baz', null, 'boom', 'cow' => 'milk', 'php' => 'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>
以上例程会输出:
0=foo&1=bar&2=baz&4=boom&cow=milk&php=hypertext+processor myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_4=boom&cow=milk&php=hypertext+processor
示例 #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& pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12& children%5Bbobby%5D%5Bsex%5D=M&children%5Bsally%5D%5Bage%5D=8& children%5Bsally%5D%5Bsex%5D=F&flags_0=CEO
注意:
只有基础数组中的数字下标元素“CEO”才获取了前缀,其它数字下标元素(如 pastimes 下的元素)则不需要为了合法的变量名而加上前缀。
示例 #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