コピペのスニペ・PHP「json_encodeの時の全角対応」

2015年3月8日

PHP プログラミング

最近、PHPでデータ保存する際に、MongoDBとのデータ連携や、スマホの問い合わせでサーバー処理をする場合に、JSONがとても扱いやすい時代になってきました。 csvやxmlなどは、手続きや、形式の仕様がややこしかったりするので、かなり柔軟に気軽に扱えるJSONは、本当に便利ですよね。

PHPの全角encode問題

PHPも、ver5移行では標準対応してくれているので、便利に簡単に使えるんですが、全角文字列が入っている場合に、encodeした際に、文字がコード化されてしまうので、生データを扱う際にちょっと面倒くさい感じになります。 不思議なことにdecodeする場合は、全く問題ないので、UTF-8環境であれば、できれば、全角そのままでデータ保存したいものである。 ただし、Shift-jisでデータ保存をしたい場合などはエスケープ処理などが必要になるので、この方法はオススメしません。

ソースコード

$data = json_encode("全角対応"); $data = preg_replace_callback('/\\\\u([0-9a-zA-Z]{4})/', function ($matches) {return mb_convert_encoding(pack('H*',$matches[1]),'UTF-8','UTF-16');},$data);

追記

PHP5.4移行であれば、json_encode関数の「JSON_UNESCAPED_UNICODE」オプションを使うことでcallback処理を書かなくても全角対応ができるようです。 書き方は下のような書き方。 $data = json_encode("全角対応" , JSON_UNESCAPED_UNICODE); 参考 : http://blog.ohgaki.net/json-escape

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。