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 管理系统程序中的后门
Aug 05 PHP
php 日期和时间的处理-郑阿奇(续)
Jul 04 PHP
php数组函数序列之array_splice() - 在数组任意位置插入元素
Nov 07 PHP
php获取301跳转URL简单实例
Dec 16 PHP
分享10段PHP常用代码
Nov 11 PHP
WordPress中编写自定义存储字段的相关PHP函数解析
Dec 25 PHP
Yii全局函数用法示例
Jan 22 PHP
PHP设计模式之适配器模式定义与用法详解
Apr 03 PHP
PHP利用Mysql锁解决高并发的方法
Sep 04 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
ThinkPHP 3.2.3实现加减乘除图片验证码
Dec 05 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
Sep 12 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
图书管理程序(二)
2006/10/09 PHP
PHP面向对象概念
2011/11/06 PHP
PHP区块查询实现方法分析
2018/05/12 PHP
PHP创建XML接口示例
2019/07/04 PHP
用表格输出1-1000之间的数字实现代码(附特效)
2013/04/21 Javascript
jquery属性过滤选择器使用示例
2013/06/18 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
jQuery中prependTo()方法用法实例
2015/01/08 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
js实现图片轮播效果
2015/12/19 Javascript
jQuery实现根据滚动条位置加载相应内容功能
2016/07/18 Javascript
JS当前页面登录注册框,固定DIV,底层阴影的实例代码
2016/09/29 Javascript
Angular中的$watch、$watchGroup、$watchCollection
2017/06/25 Javascript
echarts同一页面中四个图表切换的js数据交互方法示例
2018/07/03 Javascript
javascript中关于类型判断的一些疑惑小结
2018/10/14 Javascript
vue实现直播间点赞飘心效果的示例代码
2019/09/20 Javascript
一起写一个即插即用的Vue Loading插件实现
2019/10/31 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
vue 遮罩层阻止默认滚动事件操作
2020/07/28 Javascript
Python中的ctime()方法使用教程
2015/05/22 Python
举例讲解如何在Python编程中进行迭代和遍历
2016/01/19 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
浅谈python中拼接路径os.path.join斜杠的问题
2018/10/23 Python
Python http接口自动化测试框架实现方法示例
2018/12/06 Python
python tkinter组件使用详解
2019/09/16 Python
Win10 安装PyCharm2019.1.1(图文教程)
2019/09/29 Python
Django学习之文件上传与下载
2019/10/06 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
加大码胸罩、内裤和服装:Just My Size
2019/03/21 全球购物
成人继续教育实施方案
2014/03/01 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
社区植树节活动总结
2015/02/06 职场文书
护理自荐信
2019/05/14 职场文书
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
Python测试框架pytest核心库pluggy详解
2022/08/05 Golang