PHPにおいてDBから取得したデータをJSON文字列にしてJavascript(ajax)に返すときなど、json_encode関数を使うことはよくあるかと思います。
今回はjson_encodeした値がなぜかfalseとなり、unexpected token in jsonエラーを吐いてしまったときの対処法を書いていきます。
原因は文字化け
なぜかjson_encode関数でfalseが返るときの原因の一つとして考えられるのが文字化けです。
UTF-8を設定していても変なバイトが混ざっているとたまに動かないときがあるみたいで、この場合はmb_convert_encodingを使って再度UTF-8に変換してやる必要があります。
// 文字化け対応のため改めてUTF-8変換
$string = mb_convert_encoding($string,'UTF-8','UTF-8');
// JSON変換
$result = json_encode($string);
これで問題なくJSON文字列に変換できると思います。
ほかの人に見られたときに「なにこれ?」と思われないように上記のようにコメントを付けておくといいかも知れません。
UTF-8からUTF-8に変換するというパッと見では意味不明なコードなので。
しかしほんとに文字コード問題は難しいですね。
unexpected token in json ~ エラーの解決にもなる
PHPで「unexpected token in json ~」というエラーが出てしまうときの原因の一つとしても、今回のjson_encodeした値がfalseになっているということが考えられます。
unexpected token in json ~エラーの解決に困ったときは一度どこかでjson_encodeがfalseになってしまっていないか確認するといいかもしれません。