http_build_query函数

本文详细介绍了 PHP 中 http_build_query 函数的用法,包括如何生成 URL 编码后的请求字符串,处理不同类型的数组输入,并展示了实际应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转自:http://blog.sina.com.cn/s/blog_5b5460eb0100grhh.html

http_build_query 

-- 生成 url-encoded 之后的请求字符串

描述

string http_build_query ( array formdata [, string numeric_prefix])
根据数组产生一个urlencode之后的请求字符串,如果在基础数组中使用了数字下标同时给出了 numeric_prefix 参数。
<?php
$data
= array('foo'=>'bar',
              
'baz'=>'boom',
              
'cow'=>'milk',
              
'php'=>'hypertext processor');
              
echo
http_build_query($data);
输出:
      foo=bar&baz=boom&cow=milk&php=hypertext+processor
?> 


<?php
$data
= array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');
              
echo
http_build_query($data);
输出:
      0=foo&1=bar&2=baz&3=boom&cow=milk&php=hypertext+processor


echo http_build_query($data, 'myvar_');

      myvar_0=foo&myvar_1=bar&myvar_2=baz&myvar_3=boom&cow=milk&php=hypertext+processor

?> 


<?php
$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');
                                               
echo
http_build_query($data, 'flags_');
 输出:(为了可读性对其进行了折行)
      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 下的元素)则不需要为了合法的变量名而加上前缀。

?>  


<?php
class myClass {
  var
$foo;
  var
$baz;
  
  function
myClass() {
    
$this->foo = 'bar';
    
$this->baz = 'boom';
  }
}

$data = new myClass();

echo
http_build_query($data);
 输出:
      foo=bar&baz=boom

?> 

转载于:https://my.oschina.net/shunshun/blog/81720

<think>好的,我现在需要回答用户关于ThinkPHP5框架中http_build_query函数的作用和使用说明的问题。首先,我需要确认用户的需求。用户可能是在使用ThinkPHP5时遇到了需要生成URL查询字符串的情况,想知道如何正确使用这个函数。根据提供的引用内容,http_build_queryPHP的一个内置函数,用于生成URL编码的查询字符串。用户想知道在ThinkPHP5中这个函数的具体应用。我需要先回忆一下ThinkPHP5是否对这个函数有封装或者扩展。通常来说,ThinkPHP作为PHP框架,会直接使用PHP的原生函数,除非有特别的方法或助手函数。接下来,我需要解释http_build_query的基本用法,并结合用户提供的引用中的例子来说明。例如,引用1中的例子展示了如何将数组转换为查询字符串。同时,引用2提到该函数可以处理多维数组,并且可以使用numeric_prefix参数来处理数字键的情况。引用3和4则涉及空格编码和点号转换的问题,这些细节可能在用户的实际使用中会遇到。我需要确保在回答中提到以下几点:函数的基本作用、参数说明、在ThinkPHP5中的使用场景、可能遇到的注意事项(如空格编码为加号、点号转换为下划线等)。此外,用户可能还关心如何避免参数重复或处理复杂数据结构,所以需要覆盖这些方面。 另外,用户提供的引用中有关于不同编码类型的说明,比如PHP_QUERY_RFC1738和PHP_QUERY_RFC3986,这会影响空格和特殊字符的编码方式,这也是需要提及的要点。 最后,根据系统级指令,需要生成相关问题,我需要考虑用户可能进一步询问的内容,比如如何处理多维数组、如何修改编码类型、如何避免参数覆盖等,从而生成相关的问题列表,帮助用户深入学习。 总结一下,回答的结构应该是先介绍函数的作用,再详细说明参数和使用方法,结合示例代码,然后指出注意事项,最后附上相关问题。同时,确保使用正确的中文表达,符合LaTeX格式要求,行内公式用$...$,独立公式用$$...$$,并正确引用提供的参考资料。</think>### ThinkPHP5中http_build_query函数使用说明 在ThinkPHP5框架中,`http_build_query`函数PHP原生函数,用于将数组或对象转换为URL编码的查询字符串。其核心作用是**生成符合HTTP协议要求的参数格式**,常用于构建API请求、表单提交或URL跳转参数。 --- #### 一、函数基本语法 ```php string http_build_query ( mixed $query_data [, string $numeric_prefix [, string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] ) ``` - **参数说明**: 1. `$query_data`:输入数据,支持数组或对象 2. `$numeric_prefix`:为数字键添加前缀(避免键名丢失) 3. `$arg_separator`:参数分隔符,默认为`&` 4. `$enc_type`:编码类型,可选`PHP_QUERY_RFC1738`(空格转`+`)或`PHP_QUERY_RFC3986`(空格转`%20`) --- #### 二、使用场景示例 ##### 1. 基础用法 ```php $data = ["name" => "callback", "value" => "test"]; $query = http_build_query($data); // 输出:name=callback&value=test ``` ##### 2. 处理多维数组 ```php $data = [ "user" => ["id" => 123, "role" => "admin"], "filters" => [["status" => 1], ["status" => 2]] ]; $query = http_build_query($data); // 输出:user[id]=123&user[role]=admin&filters[0][status]=1&filters[1][status]=2 ``` ##### 3. 数字键前缀 ```php $data = [0 => "a", 1 => "b"]; $query = http_build_query($data, "var_"); // 输出:var_0=a&var_1=b ``` --- #### 三、ThinkPHP5中的注意事项 1. **点号转换问题** 若键名包含点号(如`mt.shasta`),会自动转换为下划线`_`[^4]: ```php $data = ["mt.shasta" => "value"]; // 输出:mt_shasta=value ``` 2. **空格编码差异** 根据`$enc_type`参数选择编码方式: - `PHP_QUERY_RFC1738`:空格转`+`(默认) - `PHP_QUERY_RFC3986`:空格转`%20`[^3] 3. **避免参数覆盖** 使用多维数组结构时,通过层级定义明确参数归属: ```php $data = ["user" => ["id" => 1], "order" => ["id" => 2]]; ``` --- #### 四、与ThinkPHP5框架的整合 虽然`http_build_query`是PHP原生函数,但在ThinkPHP5中常用于: 1. 生成URL跳转参数: ```php return redirect('/path?' . http_build_query($params)); ``` 2. 构建API请求参数: ```php $client = new \GuzzleHttp\Client(); $response = $client->get('https://api.com?' . http_build_query($data)); ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值