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边学边教》(04.编写简易的通讯录――视频教程1)
Dec 13 PHP
WINDOWS下php5.2.4+mysql6.0+apache2.2.4+ZendOptimizer-3.3.0配置
Mar 28 PHP
php 函数中使用static的说明
Jun 01 PHP
浅析PHP substr,mb_substr以及mb_strcut的区别和用法
Jun 21 PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
ThinkPHP实现多数据库连接的解决方法
Jul 01 PHP
php结合md5实现的加密解密方法
Jan 25 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP如何将图片文件上传到另外一台服务器上
Aug 26 PHP
laravel unique验证、确认密码confirmed验证以及密码修改验证的方法
Oct 16 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反转字符串函数strrev()函数的用法
2012/02/04 PHP
简单实现限定phpmyadmin访问ip的方法
2013/03/05 PHP
php检测url是否存在的方法
2015/04/14 PHP
用cssText批量修改样式
2009/08/29 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
JS操作select下拉框动态变动(创建/删除/获取)
2013/06/02 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
JavaScript_object基础入门(必看篇)
2016/06/13 Javascript
jQuery插件zTree实现单独选中根节点中第一个节点示例
2017/03/08 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
运用jQuery写的验证表单(实例讲解)
2017/07/06 jQuery
自定义类似于jQuery UI Selectable 的Vue指令v-selectable
2017/08/23 jQuery
详解Vue Elememt-UI构建管理后台
2018/02/27 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
微信小程序sessionid不一致问题解决
2019/08/30 Javascript
Python记录详细调用堆栈日志的方法
2015/05/05 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Django与遗留的数据库整合的方法指南
2015/07/24 Python
Numpy数组转置的两种实现方法
2018/04/17 Python
Django实现表单验证
2018/09/08 Python
python 判断参数为Nonetype类型或空的实例
2018/10/30 Python
pycharm重命名文件的方法步骤
2019/07/29 Python
Prometheus开发中间件Exporter过程详解
2020/11/30 Python
HTML5印章绘制电子签章图片(中文英文椭圆章、中文英文椭圆印章)
2019/06/03 HTML / CSS
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
MYSQL基础面试题
2012/05/13 面试题
主题婚礼策划方案
2014/02/10 职场文书
大学生怎样写好自荐信
2014/02/25 职场文书
yy婚礼司仪主持词
2014/03/14 职场文书
考博专家推荐信
2014/05/10 职场文书
公司开业庆典策划方案
2014/06/04 职场文书
学校运动会广播稿
2014/10/11 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
2022年显卡天梯图(6月更新)
2022/06/17 数码科技