传统的方法是象下面的例子那样构造查询字符串:
| 1234567 | /* assume we want to pass this variables */$city_name = "new york";$invoice_id = 3456;$paid = 1; $query_string = "city={$city_name}&id={$invoice_id}&paid={$paid}";$url = "http://www.example.com?" . $query_string; |
如今大部分PHP开发者都已经习惯于上面这种方法。它在只有三四个变量的时候毫无问题,但是再增加变量的话,代码将变得难以理解和维护,并容易引入细微的错误。
传递GET变量的最佳方式是通过PHP5中引入的http_build_query函数,它接收一个数组参数,返回一个格式正确、经过URL编码的字符串,可以直接拼接在url中。下面是相应的例子。
| 123456789 | $city_name = "new york";$invoice_id = 3456;$paid = 1; $fields = array('city' => $city_name, 'id' => $invoice_id, 'paid' => $paid); $url = "http://www.example.com?" . http_build_query($fields, '', "&"); |
在上面这个例子中,数组包含了变量名和变量值。你也可以传入只含变量值的数组,函数会使用你提供的变量名(通过函数的第二个参数传入)加上数组的索引值构造变量名。比如说你要传递六个城市名,可以象下面这么做。
| 123456789 | $fields = array('paris', 'new york', 'florence', 'london', 'berlin', 'delhi'); $url = "http://www.example.php?" . http_build_query($fields, 'city', "&"); |
产生的url如下:
http://www.example.php/?city0=paris&city1=new+york&city2=florence&city3=london&city4=berlin&city5=delhi
(译注:如果数组元素的key不是默认的整数,那么key就作为对应值的变量名,而象上面例子,数组的key是默认的整数,那么变量名是函数第二个参数加上元素的key,所以第一个变量名就是city0)
函数的第三个参数是可选参数,表示变量的分隔符,默认值是‘&’。不过我更喜欢显式的传入这个‘&’分隔符。
此外还可以传入一个复杂的数组:
| 123456789101112131415 | $city_name = "new york";$invoice_id = 3456;$currency_name = "euro";$total = 345;$receipt_no = "fgf44545"; $fields = array('city' => $city_name, 'id' => $invoice_id, 'paid' => array('currency' => $currency_name, 'amount' => $total, 'receipt' => $receipt_no) ); $url = "http://www.example.php?" . http_build_query($fields, '', "&"); |
它将生成以下URL:
http://www.example.com?city=new+york&id=3456&paid%5Bcurrency%5D=euro&paid%5Bamount%5D=345&paid%5Breceipt%5D=fgf44545
总而言之,http_build_query()确实可以简化GET查询的构造。






