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 win下Socket方式发邮件类
Aug 21 PHP
PHP file_get_contents设置超时处理方法
Sep 30 PHP
php实现12306火车票余票查询和价格查询(12306火车票查询)
Jan 14 PHP
PHP字符串word末字符实现大小写互换的方法
Nov 10 PHP
php单例模式示例分享
Feb 12 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
php检查字符串中是否有外链的方法
Jul 29 PHP
yii实现使用CUploadedFile上传文件的方法
Dec 28 PHP
PHP指定截取字符串中的中英文或数字字符的实例分享
Mar 18 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
PHP基于GD2函数库实现验证码功能示例
Jan 27 PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 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
PHP4中session登录页面的应用
2008/07/25 PHP
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
PHP 读取大文件的X行到Y行内容的实现代码
2013/06/24 PHP
dwr spring的集成实现代码
2009/03/22 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
AngularJs ng-repeat 嵌套如何获取外层$index
2016/09/21 Javascript
详解JavaScript树结构
2017/01/09 Javascript
基于jQuery插件jqzoom实现的图片放大镜效果示例
2017/01/23 Javascript
js链表操作(实例讲解)
2017/08/29 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
2018/01/25 Javascript
vue.js中created方法作用
2018/03/30 Javascript
Vue.set()动态的新增与修改数据,触发视图更新的方法
2018/09/15 Javascript
vue2过滤器模糊查询方法
2018/09/16 Javascript
JavaScript创建对象的四种常用模式实例分析
2019/01/11 Javascript
Nodejs监听日志文件的变化的过程解析
2019/08/04 NodeJs
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
[13:16]INFAMOUS vs VGJ T BO3
2018/06/07 DOTA
Python实现高效求解素数代码实例
2015/06/30 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
Python可变参数*args和**kwargs用法实例小结
2018/04/27 Python
django实现后台显示媒体文件
2020/04/07 Python
在python3.9下如何安装scrapy的方法
2021/02/03 Python
Marc Jacobs彩妆官网:Marc Jacobs Beauty
2017/07/03 全球购物
香港优质食材和美酒专门店:FoodWise
2017/09/01 全球购物
Python里面如何拷贝一个对象
2014/02/17 面试题
酒店保安领班职务说明书
2014/03/04 职场文书
煤矿班组长竞聘书
2014/03/31 职场文书
青春无悔演讲稿
2014/05/08 职场文书
韩语专业职业生涯规划范文:成功之路就在我们脚下
2014/09/11 职场文书
高等学院职业生涯规划书范文
2014/09/16 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
安全承诺书
2015/01/19 职场文书
驳回起诉民事裁定书
2015/05/19 职场文书
分享一些Java的常用工具
2021/06/11 Java/Android