注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

长风明志的博客

不要也不能做下一个谁,应该且可以做第一个自己

 
 
 

日志

 
 

【引用】PHP中构造GET查询字符串的捷径  

2011-03-30 14:49:08|  分类: PHP网络编程 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |


通过URL传递变量对于程序员来说已经是司空见惯的事情,很多人会因此认为本文毫无新意。我们把通过URL传递变量的方式

称作GET方式,另外一种是POST方式。这两种方式在PHP中都非常容易实现。举个例子,假设准备进行数据库查询,需要通过GET

传递三个变量:city、id和paid。

传统的方法是象下面的例子那样构造查询字符串:
/* 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中。下面是相应的例子。
$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, '', "&");


在上面这个例子中,数组包含了变量名和变量值。你也可以传入只含变量值的数组,函数会使用你提供的变量名(通

过函数的第二个参数传入)加上数组的索引值构造变量名。比如说你要传递六个城市名,可以象下面这么做。
$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)

函数的第三个参数是可选参数,表示变量的分隔符,默认值是‘&’。不过我更喜欢显式的传入这个‘&’分隔符。

此外还可以传入一个复杂的数组:

$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查询的构造。

翻译文章,仅供学习之用,版权归原作者所有。
原文网址:http://www.codediesel.com/php/building-get-query-strings-php/
  评论这张
 
阅读(262)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018