PHP 5.2.0 でデフォルトの拡張モジュールになった JSON 拡張モジュールを試してみる

- JSON 関数
  http://php.net/json

$data = array(
    'a' => '',
    'b' => '',
    'c'=> array(
        'd' => ''
    )
);

mb_convert_variables('UTF-8', 'EUC-JP', $data);
$json = json_encode($data);
echo $json, "\n";

$array = json_decode($json, true);
mb_convert_variables('EUC-JP', 'UTF-8', $array);
print_r($array);


  文字コードは EUC-JP で.文字コードが UTF-8 の場合は,mb_convert_variables() での文字コードの変換は必要ありません.

{"a":"\u3042","b":"\u3044","c":{"d":"\u3046"}}
Array
(
    [a] => あ
    [b] => い
    [c] => Array
        (
            [d] => う
        )

)

  PHP 5.1.6 以前や PHP 4.4.4 以前の場合は Jsphon を使えば同等のことができます.
  もちろん,JSON 拡張モジュールをインストールすれば古いバージョンの PHP でも JSON 関数が使えます.

- Jsphon
  http://www.hawklab.jp/jsonencoder/

- PECL :: Package :: json
  http://pecl.php.net/package/json

mb_convert_variables() は連想配列のキーを文字コードを変換しない

- mb_convert_variables
  http://php.net/mb_convert_variables

$array = array(
    'あいうえお' => 'アイウエオ'
);

mb_convert_variables('UTF-8', 'EUC-JP', $array);
var_dump($array);


  文字コードは EUC-JP で.「アイウエオ」は UTF-8 に変換されるけど,「あいうえお」は EUC-JP のまま.

  まあ,文字コードが変換されるとキーが変わってしまうわけなので,そういう仕様なんでしょう.