■なんでか知らないが、json_decodeするとnull(syntax_error)で何も戻らない
以下の様なコードを書いていました。普通にJSONを取得してデコードして戻すものです。
$jsonData = file_get_contents("ここにURLを");
if (empty($jsonData)) {
throw new Exception('JSONデータにアクセスできませんでした。');
}
$jsonData = json_decode($jsonData, true);
JSONは正しく戻ってきているのに、なぜかjson_decodeがNULLで戻ってしまいます。また、CakePHPを利用していたのですがpr()で表示したJSONはエラーになり、echoで表示したJSONは正常に動くという、とてもいやらしい挙動をしていました。
■原因はBOM付きのUTF-8の文字コード
また文字コードだー。うおーー。
BOMがついているUTF-8の文字コードのJSONで戻してくるAPIでした。BOMは以下のようなコードで削除することができました。
$jsonData = file_get_contents("ここにURL");
if (empty($jsonData)) {
throw new Exception('JSONデータにアクセスできませんでした。');
}
$bom = pack('H*','EFBBBF');
$jsonData = preg_replace("/^$bom/", '', $jsonData);
$jsonDecode = json_decode($jsonData, true);
また文字コードのやつに時間を取られてしまいました。うーむ。