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 5.0对象模型深度探索之绑定
Sep 05 PHP
利用static实现表格的颜色隔行显示
Oct 09 PHP
PHP array_push 数组函数
Dec 26 PHP
php中使用explode查找某个字符是否存在的方法
Jul 12 PHP
PHP Error与Logging函数的深入理解
Jun 03 PHP
CodeIgniter启用缓存和清除缓存的方法
Jun 12 PHP
PHP使用GIFEncoder类生成的GIF动态图片验证码
Jul 01 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php curl抓取网页的介绍和推广及使用CURL抓取淘宝页面集成方法
Nov 30 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
微信公众号之主动给用户发送消息功能
Jun 22 PHP
解决php extension 加载顺序问题
Aug 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的in_array低性能问题
2013/09/17 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
php微信公众号开发之微信企业付款给个人
2018/10/04 PHP
js 禁止选择功能实现代码(兼容IE/Firefox)
2010/04/23 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
jQuery数据缓存用法分析
2015/02/20 Javascript
javascript实现详细时间提醒信息效果的方法
2015/03/11 Javascript
Javascript中常用类型的格式化方法小结
2016/12/26 Javascript
快速使用node.js进行web开发详解
2017/04/26 Javascript
JS如何实现在页面上快速定位(锚点跳转问题)
2017/08/14 Javascript
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
Vue.js添加组件操作示例
2018/06/13 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Python 多线程抓取图片效率对比
2016/02/27 Python
python 容器总结整理
2017/04/04 Python
Python中的上下文管理器和with语句的使用
2018/04/17 Python
python实现公司年会抽奖程序
2019/01/22 Python
详解Python中的各种转义符\n\r\t
2019/07/10 Python
快速解决vue.js 模板和jinja 模板冲突的问题
2019/07/26 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
python录音并调用百度语音识别接口的示例
2020/12/01 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
La Redoute英国官网:法国时尚品牌
2017/04/27 全球购物
什么是Deployment descriptors;都有什么类型的部署描述符
2015/07/28 面试题
小学教师的自我评价范例
2013/10/31 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
竞聘书模板
2014/03/31 职场文书
《大江保卫战》教学反思
2014/04/11 职场文书
员工趣味活动方案
2014/08/27 职场文书
党的群众路线教育实践活动实施方案
2014/10/31 职场文书
2015年监理工作总结范文
2015/04/07 职场文书
指导教师推荐意见
2015/06/05 职场文书
Innodb存储引擎中的后台线程详解
2022/04/03 MySQL
CentOS安装Nginx并部署vue
2022/04/12 Servers
MySQL 条件查询的常用操作
2022/04/28 MySQL