(PHP 5, PHP 7, PHP 8)
http_build_query — 生成 URL-encode 之后的請(qǐng)求字符串
$query_data
,$numeric_prefix
= ?,$arg_separator
= ?,$enc_type
= PHP_QUERY_RFC1738
使用給出的關(guān)聯(lián)(或下標(biāo))數(shù)組生成一個(gè)經(jīng)過 URL-encode 的請(qǐng)求字符串。
query_data
可以是數(shù)組或包含屬性的對(duì)象。
一個(gè)
query_data
數(shù)組可以是簡(jiǎn)單的一維結(jié)構(gòu),也可以是由數(shù)組組成的數(shù)組(其依次可以包含其它數(shù)組)。
如果 query_data
是一個(gè)對(duì)象,只有 public 的屬性會(huì)加入結(jié)果。
numeric_prefix
如果在基礎(chǔ)數(shù)組中使用了數(shù)字下標(biāo)同時(shí)給出了該參數(shù),此參數(shù)值將會(huì)作為基礎(chǔ)數(shù)組中的數(shù)字下標(biāo)元素的前綴。
這是為了讓 PHP 或其它 CGI 程序在稍后對(duì)數(shù)據(jù)進(jìn)行解碼時(shí)獲取合法的變量名。
arg_separator
除非指定并使用了這個(gè)參數(shù),否則會(huì)用 arg_separator.output 來分隔參數(shù)。
enc_type
默認(rèn)使用 PHP_QUERY_RFC1738
。
如果 enc_type
是
PHP_QUERY_RFC1738
,則編碼將會(huì)以 ? RFC 1738 標(biāo)準(zhǔn)和 application/x-www-form-urlencoded
媒體類型進(jìn)行編碼,空格會(huì)被編碼成加號(hào)(+
)。
如果 enc_type
是
PHP_QUERY_RFC3986
,將根據(jù) ? RFC 3986 編碼,空格會(huì)被百分號(hào)編碼(%20
)。
返回一個(gè) URL 編碼后的字符串。
版本 | 說明 |
---|---|
5.4.0 |
加入了 enc_type 參數(shù)。
|
5.1.3 | 方括號(hào)也會(huì)被轉(zhuǎn)義。 |
5.1.2 |
加入了參數(shù) arg_separator 。
|
示例 #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, '', '&');
?>
以上例程會(huì)輸出:
foo=bar&baz=boom&cow=milk&php=hypertext+processor foo=bar&baz=boom&cow=milk&php=hypertext+processor
示例 #2 http_build_query() 使用數(shù)字下標(biāo)的元素
<?php
$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');
echo http_build_query($data) . "\n";
echo http_build_query($data, 'myvar_');
?>
以上例程會(huì)輸出:
0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor
示例 #3 http_build_query() 使用復(fù)雜的數(shù)組
<?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_');
?>
這會(huì)輸出:(為了可讀性,字已經(jīng)換行了)
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
注意:
只有基礎(chǔ)數(shù)組中的數(shù)字下標(biāo)元素“CEO”才獲取了前綴,其它數(shù)字下標(biāo)元素(如 pastimes 下的元素)則不需要為了合法的變量名而加上前綴。
示例 #4 http_build_query() 使用對(duì)象
<?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);
?>
以上例程會(huì)輸出:
pub=publicParent&pub_bar%5Bpub%5D=publicChild