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不用正则采集速度探究总结
Mar 24 PHP
PHP定时自动生成静态HTML的实现代码
Jun 20 PHP
基于PHP CURL获取邮箱地址的详解
Jun 03 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
php CI框架插入一条或多条sql记录示例
Jul 29 PHP
PDO防注入原理分析以及注意事项
Feb 25 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
php实现的mongoDB单例模式操作类
Jan 20 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP7 错误处理机制修改
Mar 09 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快速url重写 更新版[需php 5.30以上]
2010/04/20 PHP
php微信公众平台开发类实例
2015/04/01 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
javascript自动改变文字大小和颜色的效果的小例子
2013/08/02 Javascript
MyEclipse取消验证Js的两种方法
2013/11/14 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
超链接怎么正确调用javascript函数
2016/05/23 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
基于js 本地存储(详解)
2017/08/16 Javascript
Vue开发环境中修改端口号的实现方法
2019/08/15 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
[06:04]DOTA2英雄梦之声Vol19卓尔游侠
2014/06/20 DOTA
Python判断telnet通不通的实例
2019/01/26 Python
python 实现turtle画图并导出图片格式的文件
2019/12/07 Python
Pytorch之view及view_as使用详解
2019/12/31 Python
python 实现将Numpy数组保存为图像
2020/01/09 Python
TensorFlow保存TensorBoard图像操作
2020/06/23 Python
python 贪心算法的实现
2020/09/18 Python
HTML5 canvas基本绘图之绘制五角星
2016/06/27 HTML / CSS
介绍一下Linux内核的排队自旋锁
2014/01/04 面试题
学校食堂采购员岗位职责
2013/12/05 职场文书
少年闰土教学反思
2014/02/22 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
职业道德模范事迹材料
2014/08/24 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
西安兵马俑导游词
2015/02/02 职场文书
行政处罚告知书
2015/07/01 职场文书
python代码实现备忘录案例讲解
2021/07/26 Python
Python3.10的一些新特性原理分析
2021/09/15 Python