PHP使用http_build_query()构造URL字符串的方法


Posted in PHP onApril 02, 2016

本文实例讲述了PHP使用http_build_query()构造URL字符串的方法。分享给大家供大家参考,具体如下:

简单来说,http_build_query()就是将一个数组转换成url 问号?后面的参数字符串,并且会自动进行urlencode处理。

还是引用一下官方的解释:

http_build_query

http_build_query -- 生成 url-encoded 之后的请求字符串描述string http_build_query ( array formdata [, string numeric_prefix] )

使用给出的关联(或下标)数组生成一个 url-encoded 请求字符串。参数 formdata 可以是数组或包含属性的对象。一个 formdata 数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

还是看一些简单的例子吧:

$data = array(
  'foo'=>'bar',
  'baz'=>'boom',
  'site'=>'3water.com',
  'name'=>'nowa 3water');
echo http_build_query($data);
/* output
 foo=bar&baz=boom&site=3water.com&name=nowa+3water
*/

如果是索引数组与关联数组混合而成的数组又如何呢?

$data = array(
  'foo',
  'bar',
  'site'=>'3water.com',
  'name'=>'nowa 3water');
echo http_build_query($data);
/* output
  0=foo&1=bar&site=3water.com&name=nowa+3water
*/

它会自动添加数字索引。

http_build_query 还有一个参数,可以给数字索引加前缀,我们再试试:

$data = array(
  'foo',
  'bar',
  'site'=>'3water.com',
  'name'=>'nowa 3water);
echo http_build_query($data, "nm_");
/* output
nm_0=foo&nm_1=bar&site=3water.com&name=nowa+3water
*/

再复杂一些的数组又如何呢?比如二维数组什么的。

$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');

它的输出结果则是:

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&0=CEO

为了可读性对其进行了折行:

user[name]=Bob+Smith&user[age]=47&user[sex]=M&user[dob]=5%1F12%1F1956&
pastimes[0]=golf&pastimes[1]=opera&pastimes[2]=poker&pastimes[3]=rap&
children[bobby][age]=12&children[bobby][sex]=M&children[sally][age]=8&
children[sally][sex]=F&flags_0=CEO

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

不只是数组,连对象也能转化为URL字符串:

class myClass {
 var $foo;
 var $baz;
 function myClass() {
 $this->foo = 'bar';
 $this->baz = 'boom';
 }
}
$data = new myClass();
echo http_build_query($data);

末尾,再提几个函数,很可能在你搜索 http_build_query 时需要了解的:

1. parse_str:将一个url ?后面的参数转换成一个数组,array parse_str(url,arr)。

2. parse_url:将一个完整的url解析成数组,array parse_url(string url)。

3. http_build_query:再简要解释下,将一个数组转换成url ?后面的参数字符串,会自动进行urlencode处理,string http_build_query ( array formdata [, string numeric_prefix]),后面的给数组中没有指定键或者键为数字的加下标。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php+oracle 分页类
Oct 09 PHP
利用PHP实现与ASP Banner组件相似的类
Oct 09 PHP
?算你??的 PHP 程式大小
Dec 06 PHP
PHP XML备份Mysql数据库
May 27 PHP
PHP教程 预定义变量
Oct 23 PHP
php目录操作实例代码
Feb 21 PHP
ThinkPHP缓存方法S()概述
Jun 13 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
关于PHP中Session文件过多的问题及session文件保存位置
Mar 17 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
PHP递归实现层级树状展开
Apr 01 #PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 #PHP
PHP使用SOAP扩展实现WebService的方法
Apr 01 #PHP
PHP全局变量与超级全局变量区别分析
Apr 01 #PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
Apr 01 #PHP
PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法
Apr 01 #PHP
Zend Studio使用技巧两则
Apr 01 #PHP
You might like
深入php函数file_get_contents超时处理的方法详解
2013/06/03 PHP
深入php处理整数函数的详解
2013/06/09 PHP
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
通过隐藏iframe实现无刷新上传文件操作
2016/03/16 Javascript
jQuery中页面返回顶部的方法总结
2016/12/30 Javascript
字太多用...代替的方法(两种)
2017/03/15 Javascript
JavaScript 保护变量不被随意修改的实现代码
2017/09/27 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python实现字典的遍历与排序功能示例
2017/12/23 Python
微信跳一跳python自动代码解读1.0
2018/01/12 Python
python3.6的venv模块使用详解
2018/08/01 Python
django DRF图片路径问题的解决方法
2018/09/10 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
Python算法中的时间复杂度问题
2019/11/19 Python
计算pytorch标准化(Normalize)所需要数据集的均值和方差实例
2020/01/15 Python
Python通过VGG16模型实现图像风格转换操作详解
2020/01/16 Python
Python爬虫requests库多种用法实例
2020/05/28 Python
如何理解python中数字列表
2020/05/29 Python
python 实现关联规则算法Apriori的示例
2020/09/30 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
后勤岗位职责
2013/11/26 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
公司会计岗位职责
2014/02/13 职场文书
大学四年个人自我小结
2014/03/05 职场文书
公司离职证明范本(5篇)
2014/09/17 职场文书
英文产品推荐信
2015/03/27 职场文书
2015年财政局工作总结
2015/05/21 职场文书
2015双创工作总结
2015/07/24 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书
SQL中的三种去重方法小结
2021/11/01 SQL Server
解决WINDOWS电脑开机后桌面没有任何图标
2022/04/09 数码科技
vue修饰符.capture和.self的区别
2022/04/22 Vue.js