当前位置: 首页> 最新文章列表> mb_parse_str 与 parse_str 有什么区别?哪种情况下更适用?

mb_parse_str 与 parse_str 有什么区别?哪种情况下更适用?

gitbox 2025-07-26

在 PHP 中,parse_strmb_parse_str 都是用于解析 URL 编码的查询字符串并将其转换为变量的函数。尽管这两个函数功能相似,但它们之间有一些关键的区别,特别是在多字节字符集(例如中文、日文等)支持方面。本文将详细讨论它们的区别及使用场景。

1. parse_str 函数简介

parse_str 是 PHP 中一个常用的函数,用于解析一个 URL 编码的查询字符串,将其转换为 PHP 变量。其语法如下:

<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">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">void</span></span><span>
</span></span>
  • 参数

    • $str:待解析的 URL 编码查询字符串。

    • $array(可选):如果提供了此参数,解析的结果将以关联数组的形式存储在其中。

  • 返回值

    • 该函数没有返回值,直接通过引用修改 $array 参数,或者将全局变量赋值。

示例

<span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"name=John&amp;age=25&amp;city=NewYork"</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; John
    [age] =&gt; </span><span><span class="hljs-number">25</span></span><span>
    [city] =&gt; NewYork
)
</span></span>

2. mb_parse_str 函数简介

mb_parse_str 是多字节字符串扩展(mbstring)提供的一个函数,它与 parse_str 类似,但不同之处在于它能够正确处理多字节字符集(如 UTF-8 编码的中文字符)。它的语法与 parse_str 非常相似:

<span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> &amp;</span><span><span class="hljs-variable">$array</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">void</span></span><span>
</span></span>
  • 参数

    • $str:待解析的 URL 编码查询字符串,通常是一个多字节字符集编码的字符串。

    • $array(可选):解析后的结果会存储在此关联数组中。

  • 返回值

    • parse_str 相同,mb_parse_str 也没有返回值,它通过引用 $array 参数返回解析结果。

示例

<span><span><span class="hljs-variable">$query</span></span><span> = </span><span><span class="hljs-string">"name=张三&amp;age=25&amp;city=北京"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">mb_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>
    [city] =&gt; 北京
)
</span></span>

3. mb_parse_strparse_str 的区别

  1. 多字节字符支持

    • parse_str 是针对单字节字符集(如 ISO-8859-1、GBK)设计的,对于多字节字符(如中文、日文、韩文等)会出现乱码问题。

    • mb_parse_str 是多字节字符扩展的一部分,它能够正确处理多字节字符集的字符串,因此在解析含有非 ASCII 字符的查询字符串时,mb_parse_strparse_str 更为可靠。

  2. 字符集处理

    • parse_str 不会处理多字节字符集,因此在使用 parse_str 时,如果查询字符串包含中文或其他非 ASCII 字符,解析结果可能会发生乱码。

    • mb_parse_str 适用于使用 UTF-8 等多字节编码的字符串,它会确保解析时字符正确无误。

  3. 性能

    • parse_str 是 PHP 内置函数,性能较好,适用于简单的单字节字符集查询字符串。

    • mb_parse_strmbstring 扩展的一部分,如果服务器未安装 mbstring,则无法使用,且通常会稍微慢一些,因为它需要额外处理多字节字符。

4. 哪种情况下更适用?

  • 使用 parse_str

    • 当你处理的 URL 查询字符串仅包含 ASCII 字符或单字节字符时,parse_str 是最佳选择。它简单高效,适用于英文或其他只包含单字节字符的场景。

  • 使用 mb_parse_str

    • 当你处理的 URL 查询字符串包含多字节字符(例如中文、日文等)时,mb_parse_str 是必需的。它能够正确解析这些字符,避免乱码问题。

5. 总结

  • parse_str 是用于单字节字符集的标准解析函数,适用于不包含特殊字符或多字节字符的情况。

  • mb_parse_str 则是多字节字符串扩展提供的函数,专门用于处理包含多字节字符集(如中文、日文等)的查询字符串。

根据实际情况选择合适的函数,能够确保程序在处理查询字符串时的正确性与效率。如果应用涉及到多语言支持或需要处理非 ASCII 字符,建议使用 mb_parse_str