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 相关文章推荐
一个可查询所有表的“通用”查询分页类
Oct 09 PHP
实时抓取YAHOO股票报价的代码
Oct 09 PHP
php set_magic_quotes_runtime() 函数过时解决方法
Jul 08 PHP
php数组中删除元素之重新索引的方法
Sep 16 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
Nov 05 PHP
Zend Framework动作助手FlashMessenger用法详解
Mar 05 PHP
php生成酷炫的四个字符验证码
Apr 22 PHP
php实现文件管理与基础功能操作
Mar 21 PHP
laravel自定义分页效果
Jul 23 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
Oct 13 PHP
Laravel等框架模型关联的可用性浅析
Dec 15 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分页函数示例代码分享
2014/02/24 PHP
php 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
javascript实现轮显新闻标题链接
2007/08/13 Javascript
javascript 动态加载 css 方法总结
2009/07/11 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
poshytip 基于jquery的 插件 主要用于显示微博人的图像和鼠标提示等
2012/10/12 Javascript
JS实现div内部的文字或图片自动循环滚动代码
2013/04/19 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
jQuery form插件之formDdata参数校验表单及验证后提交
2016/01/23 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
2016/05/09 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
[02:10]DOTA2 TI10勇士令状玩法及不朽Ⅰ展示:焕新世界,如你所期
2020/05/29 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
python中redis的安装和使用
2016/12/04 Python
python生成式的send()方法(详解)
2017/05/08 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Django使用Mysql数据库已经存在的数据表方法
2018/05/27 Python
python 找出list中最大或者最小几个数的索引方法
2018/10/30 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
解决Python logging模块无法正常输出日志的问题
2020/02/21 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
优秀志愿者事迹材料
2014/02/03 职场文书
市场开发与营销专业求职信范文
2014/05/01 职场文书
2015年妇联工作总结范文
2015/04/22 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
jQuery class属性操作addClass()与removeClass()、hasClass()、toggleClass()
2021/03/31 jQuery
Java设计模式之享元模式示例详解
2022/03/03 Java/Android
Python中with上下文管理协议的作用及用法
2022/03/18 Python