TShopping

 找回密碼
 註冊
搜索
查看: 428|回復: 0

[教學] http_build_query — 生成URL-encode之後的請求字符串

[複製鏈接]
發表於 2014-12-8 17:00:30 | 顯示全部樓層 |閱讀模式
 
Push to Facebook Push to Plurk Push to Twitter 
說明
string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type =PHP_QUERY_RFC1738 ]]] )

使用給出的關聯(或下標)數組生成一個經過URL-encode 的請求字符串。

參數query_data
可以是數組或包含屬性的對象。
一個 query_data 數組可以是簡單的一維結構,也可以是由數組組成的數組(其依次可以包含其它數組)。
如果query_data是一個對象,只有public的屬性會加入結果。

numeric_prefix
如果在基礎數組中使用了數字下標同時給出了該參數,此參數值將會作為基礎數組中的數字下標元素的前綴。
這是為了讓PHP 或其它CGI 程序在稍後對數據進行解碼時獲取合法的變量名。

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

ENC_TYPE
默認使用PHP_QUERY_RFC1738。
如果enc_type是 PHP_QUERY_RFC1738,則編碼將會以» RFC 1738標準和application/x-www-form-urlencoded媒體類型進行編碼,空格會被編碼成加號(+)。
如果enc_type是 PHP_QUERY_RFC3986,將根據» RFC 3986編碼,空格會被百分號編碼(%20)。

返回值
返回一個URL 編碼後的字符串。

Example #1 http_build_query() 使用示例
  1. <?php
  2. $data = array('foo'=>'bar',
  3.               'baz'=>'boom',
  4.               'cow'=>'milk',
  5.               'php'=>'hypertext processor');

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

  8. ?>
複製代碼



以上例程会输出:
  1. foo=bar&baz=boom&cow=milk&php=hypertext+processor
  2. foo=bar&baz=boom&cow=milk&php=hypertext+processor
複製代碼
Example #2 http_build_query() 使用数字下标的元素
  1. <?php
  2. $data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');

  3. echo http_build_query($data) . "\n";
  4. echo http_build_query($data, 'myvar_');
  5. ?>
複製代碼


以上例程会输出:
  1. 0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor
  2. myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor
複製代碼


Example #3 http_build_query() 使用复杂的数组
  1. <?php
  2. $data = array('user'=>array('name'=>'Bob Smith',
  3.                             'age'=>47,
  4.                             'sex'=>'M',
  5.                             'dob'=>'5/12/1956'),
  6.               'pastimes'=>array('golf', 'opera', 'poker', 'rap'),
  7.               'children'=>array('bobby'=>array('age'=>12,
  8.                                                'sex'=>'M'),
  9.                                 'sally'=>array('age'=>8,
  10.                                                'sex'=>'F')),
  11.               'CEO');

  12. echo http_build_query($data, 'flags_');
  13. ?>
複製代碼
这会输出:(为了可读性,字已经换行了)
  1. user%5Bname%5D=Bob+Smith&user%5Bage%5D=47&user%5Bsex%5D=M&
  2. user%5Bdob%5D=5%2F12%2F1956&pastimes%5B0%5D=golf&pastimes%5B1%5D=opera&
  3. pastimes%5B2%5D=poker&pastimes%5B3%5D=rap&children%5Bbobby%5D%5Bage%5D=12&
  4. children%5Bbobby%5D%5Bsex%5D=M&children%5Bsally%5D%5Bage%5D=8&
  5. children%5Bsally%5D%5Bsex%5D=F&flags_0=CEO
複製代碼


Note:
只有基础数组中的数字下标元素“CEO”才获取了前缀,其它数字下标元素(如 pastimes 下的元素)则不需要为了合法的变量名而加上前缀。

Example #4 http_build_query() 使用对象
  1. <?php
  2. class parentClass {
  3.     public    $pub      = 'publicParent';
  4.     protected $prot     = 'protectedParent';
  5.     private   $priv     = 'privateParent';
  6.     public    $pub_bar  = Null;
  7.     protected $prot_bar = Null;
  8.     private   $priv_bar = Null;

  9.     public function __construct(){
  10.         $this->pub_bar  = new childClass();
  11.         $this->prot_bar = new childClass();
  12.         $this->priv_bar = new childClass();
  13.     }
  14. }

  15. class childClass {
  16.     public    $pub  = 'publicChild';
  17.     protected $prot = 'protectedChild';
  18.     private   $priv = 'privateChild';
  19. }

  20. $parent = new parentClass();

  21. echo http_build_query($parent);
  22. ?>
複製代碼

以上例程会输出:
  1. pub=publicParent&pub_bar%5Bpub%5D=publicChild
複製代碼



 

臉書網友討論
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2016-12-4 16:03 , Processed in 0.055270 second(s), 21 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表