PHPでは、 PARSE_STRおよびMB_PARSE_STRは、URLエンコードされたクエリ文字列を解析して変数に変換するために使用される関数です。 2つの機能は類似していますが、特にマルチバイト文字セット(中国、日本など)をサポートするために、それらの間にはいくつかの重要な違いがあります。この記事では、それらの違いと使用シナリオについて詳しく説明します。
Parse_Strは、URLエンコードされたクエリ文字列を解析し、PHP変数に変換する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> &</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&age=25&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] => John
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => NewYork
)
</span></span>
MB_PARSE_STRは、 Parse_Strに似たMultibyte String Extension( MBSTRing )によって提供される関数ですが、違いはマルチバイト文字セット(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> &</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=チャン・サン&age=25&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] => チャン・サン
[age] => </span><span><span class="hljs-number">25</span></span><span>
[city] => 北京
)
</span></span>
マルチバイト文字サポート:
Parse_Strは、シングルバイト文字セット(ISO-8859-1、GBKなど)用に設計されており、マルチバイトキャラクター(中国語、日本、韓国など)には文字化けの問題があります。
MB_PARSE_STRは、マルチバイト文字セットの文字列を正しく処理するマルチバイト文字拡張の一部であるため、 MB_PARSE_STRは、非ASCII文字を含むクエリ文字列を解析するときにParse_Strよりも信頼性が高くなります。
文字セット処理:
Parse_Strはマルチバイト文字セットを処理しないため、 Parse_Strを使用する場合、クエリ文字列に中国語または他の非ASCII文字が含まれている場合、解析結果は文字化けされる可能性があります。
MB_PARSE_STRは、UTF-8などのマルチバイトエンコード文字列に適しています。これにより、解析中にキャラクターが正しいことが保証されます。
パフォーマンス:
Parse_Strは、パフォーマンスが良好なPHPビルトイン機能であり、単純なシングルバイト文字セットクエリ文字列に適しています。
MB_PARSE_STRはMBSTRING拡張機能の一部です。これは、サーバーにMBSSTRINGがインストールされていない場合は利用できません。マルチバイト文字の追加処理が必要なため、通常はわずかに遅くなります。
parse_strの使用:
処理しているURLクエリ文字列にASCII文字またはシングルバイト文字のみが含まれている場合、 Parse_Strが最良の選択です。シンプルで効率的で、単一バイト文字のみを含む英語やその他のシナリオに適しています。
MB_PARSE_STRの使用:
MB_PARSE_STRは、プロセスのURLクエリ文字列にマルチバイト文字(中国語、日本など)が含まれている場合に必要です。これらのキャラクターを正しく解析し、文字化けの問題を回避できます。
Parse_Strは、シングルバイト文字セットの標準的なパース関数であり、特別な文字またはマルチバイト文字がない場合に適しています。
MB_PARSE_STRは、マルチバイトの文字列セット(中国語、日本など)を含むクエリ文字列を処理するために特別に使用されるマルチバイト文字列拡張によって提供される関数です。
実際の状況に応じて適切な関数を選択すると、クエリ文字列を処理するときにプログラムの正確性と効率を確保できます。アプリケーションに多言語サポートが含まれる場合、または非ASCII文字を処理する必要がある場合は、 MB_PARSE_STRを使用することをお勧めします。