http_build_query 是 PHP 中将数组转换为 URL 查询字符串的函数,自动处理 URL 编码、支持一维关联/索引数组及嵌套数组,并提供编码类型与分隔符等可选参数。

http_build_query 是 PHP 中专门用来把数组转成 URL 查询字符串的函数,用起来简单直接,适合拼接 GET 参数、构造 API 请求地址等场景。
基础用法:一维关联数组
最常见的情况是传入一个键值对数组,函数会自动按 key=value 格式拼接,并用 & 连接:
$data = ['name' => '张三', 'age' => 25, 'city' => '北京']; echo http_build_query($data); // 输出:name=%E5%BC%A0%E4%B8%89&age=25&city=%E5%8C%97%E4%BA%AC
注意:中文和特殊字符会自动 URL 编码(UTF-8),无需手动调用 urlencode()。
处理索引数组(数字键)
如果数组没有显式键名(如 [1, 'a', 'b']),默认会生成 0=1&1=a&2=b 这样的形式。若想自定义键名,可传入第三个参数指定分隔符,或先转为关联数组:
立即学习“PHP免费学习笔记(深入)”;
- 保持默认数字键:直接传入即可
- 指定键名:用
array_combine()或手动构造关联数组 - 避免数字键混乱:推荐统一用关联数组,语义更清晰
嵌套数组(多维)支持
该函数原生支持二维数组,会自动展开为 user[name]=张三&user[age]=25 形式:
$data = [
'user' => ['name' => '李四', 'level' => 3],
'token' => 'abc123'
];
echo http_build_query($data);
// 输出:user[name]=%E6%9D%8E%E5%9B%9B&user[level]=3&token=abc123
方括号 [ ] 会被编码为 [ 和 ],后端(如 PHP 的 $_GET)能自动识别并还原为嵌套结构。
可选参数:编码方式与分隔符
函数支持三个可选参数:
- 第二个参数
$numeric_prefix:给数字键加前缀(较少用) - 第三个参数
$arg_separator:自定义键值对之间的分隔符(默认&,可改为&适配 XHTML) - 第四个参数
$encoding_type:指定编码类型(默认PHP_QUERY_RFC1738,即空格转+;设为PHP_QUERY_RFC3986则空格转%20)
多数情况用默认参数就够了,除非对接的接口有特殊要求(比如严格遵循 RFC3986)。



















