采用PHP函数http_build_query生成URL-encoded的查询字符串

创造于:2010年06月04日08:20 档案在:PHP 浏览次数:207 作者:liuhui

PHP内置函数研究系列第八期,采用PHP函数http_build_query生成URL-encoded的查询字符串,开发过程中经常会出现这样一种情况,把大量的变量组装成一串请求链接,通用的方案是通过字符串与变量的组合生成查询字符串,如果链接很长很难维护,特别是一个搜索条件下的分页链接,条件可能更多,使用PHP内置函数http_build_query()可生成URL-encoded的查询字符串,实现把数组或对象转换成字符串,这里谈谈这个函数的用法与实例。

一,函数原型
string http_build_query  (  array $formdata  [,  string $numeric_prefix  [,  string $arg_separator  ]] )

二,兼容版本
PHP 5

三,基础用法与实例
1,把数组生成一个经过URL-encode的请求字符串

  1. <?php
  2. $data = array('k1'=>'value1', 'k2'=>'value2','k3'=>'value3','k4'=>'value4');
  3. echo http_build_query($data);
  4. ?>

输出:k1=value1&k2=value2&k3=value3&k4=value4

2,把二维数组生成一个请求字符串

  1. <?php
  2. $data = array(
  3.             'k1'=>array('kk1'=>'value1'),
  4.             'k2'=>array('kk2'=>'value2')
  5. );            
  6. print_r(http_build_query($data));
  7. ?>

输出:k1%5Bkk1%5D=value1&k2%5Bkk2%5D=value2
把上面的输出转换为可读的字符如下
k1[kk1]=value1&k2[kk2]=value2

3,把对象属性生成一个请求字符串

  1. class ClassName {
  2.   var $a;
  3.   var $b;
  4.  
  5.   function ClassName()
  6.   {
  7.     $this->a = 'liu';
  8.     $this->b = 'hui';
  9.   }
  10. }
  11. $data = new ClassName();
  12. echo http_build_query($data);

输出:a=liu&b=hui

四,函数描述

使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。参数 formdata 可以是数组或包含属性的对象。一个 formdata 数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI 程序在稍后对数据进行解码时获取合法的变量名。

这个函数在组装带有参数链接的情况下非常有用,可简化参数组装过程,提高代码的可读性与可维护性。具体请参考PHP手册,请关注下一期PHP内置函数研究系列。

http://cn.php.net/manual/en/function.http-build-query.php
 

评论和回复

zhudong0808 发表于 2010年06月30日09:18

我还以为是解决url链接过长,导致参数无法传递的解决方案
发表一下看法
注册一下,轻松回复,请放心,邮箱严格保密,便于更好沟通
用户名*
邮箱*
个人主页 (带http://)
内容
验证码