mb_parse_str

関数の概要

mb_parse_str は PHP のマルチバイト文字対応版のクエリ文字列解析関数です。URLのクエリ文字列やフォームのPOSTデータなど、エンコードされた文字列を複数の変数に分解して連想配列として取得できます。
特に日本語などマルチバイト文字を含むデータを安全に処理したい場合に便利です。

パラメータの説明

  • string $string
    解析対象のクエリ形式の文字列を指定します。例:”key1=value1&key2=value2″
  • array &$result
    解析結果を受け取る配列の変数を指定します。関数内でこの配列に解析結果が格納されます。
  • string|null $encoding
    オプション。解析時の文字エンコーディングを指定します。省略した場合は内部文字エンコーディングが使われます。

戻り値

戻り値はありません。解析結果は第2引数に渡した配列変数に参照渡しで格納されます。

使用例

基本的な使い方

$query = "name=%E3%82%BF%E3%83%AD%E3%82%A6&age=25";
mb_parse_str($query, $output);
var_dump($output);

URLエンコードされた日本語を含むクエリ文字列を解析し、連想配列に変換しています。この例では「name」キーに「タロウ」が格納されます。

エンコーディングを指定して解析

$query = "key=%E3%83%86%E3%82%B9%E3%83%88";
mb_parse_str($query, $result, "UTF-8");
print_r($result);

UTF-8として文字列を解析したい場合、3番目の引数でエンコーディングを指定します。日本語などのマルチバイト文字が正しく扱われます。

POSTされたマルチバイトクエリの解析例

$postData = "comment=%E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF%E3%80%82&id=1001";
mb_parse_str($postData, $data);
echo $data['comment']; // 「こんにちは。」が出力される

POSTデータとして渡されたクエリ文字列を解析し、コメント欄の内容を取り出す例です。正しくマルチバイト文字が復元されます。

関連する関数

  • parse_str – mb_parse_strのマルチバイト非対応バージョン
  • mb_convert_encoding – 文字エンコーディング変換を行う関数
  • mb_parse_str – 本関数自体(念のため)
  • http_build_query – 配列からクエリ文字列を生成する関数

まとめ

mb_parse_str は、マルチバイト文字を含むクエリ文字列を正しく解析できるPHP関数です。特に日本語などの多バイト文字を含むWebアプリケーションで役立ちます。
エンコーディングを指定することで文字化けを防ぎ、安全に文字列を連想配列に変換できるため、データの受け渡しや処理をスムーズに行いたい場合に積極的に活用しましょう。