當前位置: 首頁> 最新文章列表> 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