產生 URL-encode 之後的請求字串

http_build_query

(PHP 5, PHP 7, PHP 8)

http_build_query產生 URL-encode 之後的請求字串

說明

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

使用給出的關聯(或下標)陣列產生一個經過 URL-encode 的請求字串。

參數

query_data

可以是陣列或包含屬性的對象。

一個 query_data 陣列可以是簡單的一維結構,也可以是由陣列組成的陣列(其依次可以包含其它陣列)。

如果 query_data 是一個對象,只有 public 的屬性會加入結果。

numeric_prefix

如果在基礎陣列中使用了數字下標同時給出了該參數,此參數值將會作為基礎陣列中的數字下標元素的字首。

這是爲了讓 PHP 或其它 CGI 程式在稍後對數據進行解碼時獲取合法的變數名。

arg_separator

除非指定並使用了這個參數,否則會用 arg_separator.output 來分隔參數。

enc_type

預設使用 PHP_QUERY_RFC1738

如果 enc_typePHP_QUERY_RFC1738,則編碼將會以 » RFC 1738 標準和 application/x-www-form-urlencoded 媒體型別進行編碼,空格會被編碼成加號(+)。

如果 enc_typePHP_QUERY_RFC3986,將根據 » RFC 3986 編碼,空格會被百分號編碼(%20)。

返回值

返回一個 URL 編碼后的字串。

更新日誌

版本 說明
5.4.0 加入了 enc_type 參數。
5.1.3 方括號也會被轉義。
5.1.2 加入了參數 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'''&amp;');

?>

以上例程會輸出:

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

示例 #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=hypertext+processor
myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=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

參見

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *