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 相关文章推荐
计算2000年01月01日起到指定日的天数
Oct 09 PHP
mysql_fetch_row,mysql_fetch_array,mysql_fetch_assoc的区别
Apr 24 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
使用CodeIgniter的类库做图片上传
Jun 12 PHP
PHP使用自定义方法实现数组合并示例
Jul 07 PHP
php禁用函数设置及查看方法详解
Jul 25 PHP
简单实现PHP留言板功能
Dec 21 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
php 判断页面或图片是否经过gzip压缩的方法
Apr 05 PHP
Yii2框架操作数据库的方法分析【以mysql为例】
May 27 PHP
XAMPP升级PHP版本实现步骤解析
Sep 04 PHP
linux mint下安装phpstorm2020包括JDK部分的教程详解
Sep 17 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
PHP图片等比缩放类SimpleImage使用方法和使用实例分享
2014/04/10 PHP
PHP多文件上传类实例
2015/03/07 PHP
php+ajax实现无刷新数据分页的办法
2015/11/02 PHP
php中文字符串截取多种方法汇总
2016/10/06 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
yii2 url重写并隐藏index.php方法
2018/12/10 PHP
Node.js中使用计时器定时执行函数详解
2014/08/15 Javascript
详解JavaScript中setSeconds()方法的使用
2015/06/11 Javascript
js实现Select列表内容自动滚动效果代码
2015/08/20 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
Vuejs第一篇之入门教程详解(单向绑定、双向绑定、列表渲染、响应函数)
2016/09/09 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
webpack实用小功能介绍
2018/01/02 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
2018/05/16 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
在Django同1个页面中的多表单处理详解
2017/01/25 Python
Tensorflow 同时载入多个模型的实例讲解
2018/07/27 Python
Python3远程监控程序的实现方法
2019/07/15 Python
关于python导入模块import与常见的模块详解
2019/08/28 Python
解决Django删除migrations文件夹中的文件后出现的异常问题
2019/08/31 Python
Python图片的横坐标汉字实例
2019/12/04 Python
python如何把字符串类型list转换成list
2020/02/18 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
2013/11/05 HTML / CSS
俄罗斯电子产品、计算机和家用电器购物网站:OLDI
2019/10/27 全球购物
巴西备受欢迎的服装和生活方式品牌:FARM Rio
2020/02/04 全球购物
Cynthia Rowley官网:全球领先的生活方式品牌
2020/10/27 全球购物
工厂车间标语
2014/06/19 职场文书
2014年“世界无车日”活动方案
2014/09/21 职场文书
甲午风云观后感
2015/06/02 职场文书
2016年教师寒假学习心得体会
2015/10/09 职场文书
七年级作文之下雨天
2019/12/23 职场文书
jdbc使用PreparedStatement批量插入数据的方法
2021/04/27 MySQL