読者です 読者をやめる 読者になる 読者になる

PHPでJSONをエンコードする

PHP

 PHPでJSONのエンコードを行う拡張・ライブラリとしては、以下のようなものがあります。


 他言語環境でJSONを確実に扱うには、文字列をユニコードで出力しなくてはなりません。上記の拡張・ライブラリを使う場合、あらかじめデータに含まれる文字列の文字コードUTF-8に変換しておく必要があります。
 mbstringが使えるならば、mb_convert_variableを使えば簡単です。

$data = mb_convert_variables('UTF-8', mb_internal_encoding(), $data);
$json = json_encode($data);


 mbstringが使えないならば、データに含まれる値を再帰的に調べて、文字列をUTF-8に変換していかなくてはなりません。PHP5を使用している場合ならば、iconvを使って変換を行うことができるでしょう。
 いくつかの海外のPHP情報サイトを見て回ったところ、utf8_encodeを使って、ISO-8859-1からUTF-8に変換する、というテクニック(バットノウハウ)も紹介されていました。西欧系言語圏では有効かもしれませんが、それ以外の地域では、余り有効な対処法ではありません。
 また、実際にソースコードを読んだ訳ではないので自信はないのですが、php-jsonのドキュメントを眺めたかぎりでは、PHP6でphp-jsonを使うと、unicode型の文字列は、自動的にユニコード文字列としてエンコードされるようです。


 今、Piece FrameworkのJSON関連のコードを書いていますが、配慮しなくてはいけないことは多いようです。


 以下は愚痴です。スルーして下さい。

  • 文字コードの変換に、utf8_encode, mbstring, iconv, PHP6のunicode, ってありえないよ。PHPのコミュニティって上手くいってるの?
  • こんなに沢山JSONエンコーダがあるのに、どれ一つとして満足に動作しない。循環参照をチェックする処理は当然行って欲しいし、文字コードの変換も面倒を見て欲しい。
  • どのライブラリもmb_convert_encodingが使えない場合、文字を一つ一つイテレートしながら、ユニコードへの変換を試みようとするから始末が悪い。せめて、iconv関数が使えるかどうかを調べてよ。そこまでして、CPUを使用し、地球の気温を上げたいか。