当前位置: 首页> 最新文章列表> 使用 http_build_query 与 parse_str 实现查询字符串与数组的相互转换

使用 http_build_query 与 parse_str 实现查询字符串与数组的相互转换

M66 2025-06-24

在 PHP 开发中,我们经常会处理 URL 查询字符串(Query String)与数组之间的相互转换。比如,在前端通过表单提交的数据会以查询字符串的形式传递到后端,而在后端处理过程中,常常需要将其转换为数组来操作数据;相反,在构建 URL 时又需要将数组转换回查询字符串。

PHP 为我们提供了两个非常方便的函数:http_build_queryparse_str,用于实现这一功能。

一、http_build_query:数组转查询字符串

http_build_query 函数可以将一个数组转换成 URL 编码的查询字符串。常用于构造 GET 请求的参数。

语法:

<span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-title function_ invoke__">http_build_query</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$data</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$numeric_prefix</span></span><span> = </span><span><span class="hljs-string">""</span></span><span>, ?</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$arg_separator</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>, </span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-variable">$encoding_type</span></span><span> = PHP_QUERY_RFC1738)
</span></span>

示例:

<span><span><span class="hljs-variable">$params</span></span><span> = [
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'张三'</span></span><span>,
    </span><span><span class="hljs-string">'age'</span></span><span> =&gt; </span><span><span class="hljs-number">25</span></span><span>,
    </span><span><span class="hljs-string">'hobbies'</span></span><span> =&gt; [</span><span><span class="hljs-string">'reading'</span></span><span>, </span><span><span class="hljs-string">'coding'</span></span><span>]
];

</span><span><span class="hljs-variable">$queryString</span></span><span> = </span><span><span class="hljs-title function_ invoke__">http_build_query</span></span><span>(</span><span><span class="hljs-variable">$params</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$queryString</span></span><span>;
</span></span>

输出结果:

<span><span>name=%E5%BC%A</span><span><span class="hljs-number">0</span></span><span>%E4%B8%89&amp;age=</span><span><span class="hljs-number">25</span></span><span>&amp;hobbies%5B</span><span><span class="hljs-number">0</span></span><span>%5D=reading&amp;hobbies%5B1%5D=coding
</span></span>

注意:默认情况下,数组会被序列化为带下标的格式,比如 hobbies[0]=reading&hobbies[1]=coding

如果需要自定义分隔符或编码方式,可以使用额外的参数进行控制。例如,将分隔符改为分号:

<span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">http_build_query</span></span><span>(</span><span><span class="hljs-variable">$params</span></span><span>, </span><span><span class="hljs-string">''</span></span><span>, </span><span><span class="hljs-string">';'</span></span><span>);
</span></span>

输出结果:

<span><span>name=%E5%BC%A</span><span><span class="hljs-number">0</span></span><span>%E4%B8%89;age=</span><span><span class="hljs-number">25</span></span><span>;hobbies%5B</span><span><span class="hljs-number">0</span></span><span>%5D=reading;hobbies%5B1%5D=coding
</span></span>

二、parse_str:查询字符串转数组

parse_str 函数可以将 URL 查询字符串解析为数组或变量,常用于解析 GET 请求或自定义字符串。

语法:

<span><span><span class="hljs-keyword">void</span></span><span> </span><span><span class="hljs-title function_ invoke__">parse_str</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$result</span></span><span>)
</span></span>

示例:

<span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">'name=%E5%BC%A0%E4%B8%89&amp;age=25&amp;hobbies%5B0%5D=reading&amp;hobbies%5B1%5D=coding'</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">parse_str</span></span><span>(</span><span><span class="hljs-variable">$query</span></span><span>, </span><span><span class="hljs-variable">$output</span></span><span>);

</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$output</span></span><span>);
</span></span>

输出结果:

<span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
(
    [name] =&gt; 张三
    [age] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [hobbies] =&gt; </span><span><span class="hljs-title function_ invoke__">Array</span></span><span>
        (
            [</span><span><span class="hljs-number">0</span></span><span>] =&gt; reading
            [</span><span><span class="hljs-number">1</span></span><span>] =&gt; coding
        )
)
</span></span>

注意:parse_str 默认会将变量赋值到当前作用域中,如果第二个参数未提供,则变量将以变量名形式出现在当前作用域中,这在某些情况下可能导致变量覆盖,因此推荐始终提供第二个参数作为目标数组。

三、实际应用场景

  1. 前端表单模拟:将数组转换为查询字符串,模拟 GET 请求。

  2. URL 重写与跳转:在生成动态 URL 时构建参数。

  3. 接口请求:在发送 API 请求时拼接参数。

  4. 参数调试工具:用于构建参数字符串或解析调试返回。

四、小结

通过 http_build_queryparse_str,我们可以轻松实现数组与 URL 查询字符串之间的相互转换。这两个函数不仅简单易用,而且功能强大,是日常 PHP 开发中处理参数传递不可或缺的工具。掌握它们,可以大大提高我们在处理 URL 与数据交互方面的效率。