JSONでアラート:Uninitialized string offset
PHPとFlashとの間をやりとりしようとするとXMLとか使うことが多いようですが、お互いプログラム。配列は配列のままで受け取れると楽なこともあります。
そんなときうってつけなのがJSONっていうもの。詳しい説明は他所にオマカセするとして、requireして使うだけで、すぐに利用できてとっても便利です。
で、そのJSON(PEARのServices_JSON)を使っていたとき遭遇したのがこちらのアラート。
Uninitialized string offset
JSON内部の行数を返してくるため、なんかバグをみつけてしまったんかなーと思いましたが、原因がわかったのでメモ。
まず、僕が使っている環境は次の通りです
・チカッパのレンタルサーバー
・CakePHP1.2
・MySQL4.0
・JSON(2006/11っていうファイルみたい)
先ほどのアラートは、なんか文字に関係するらしい ということしかわからず、しかもある時からで始めたので、きっと特定の文字に依存するものなんだろうと思ってました。
回りくどいので経過は省略。結論から言うと、DBの文字コードがujisのために発生していました。
「昔のチカッパのMySQL4.0の文字コードはujis」
↓
「最近新しく投入されたMySQL5.0の文字コードはUTF-8」
レンタルサーバーのDBを間借りしているので、文字コードはチカッパさんの指定通り。そのため、新しいDBで再度テーブルを作り直して解決しました。
ブラウザでmyPHPadminを表示したとき、保存されたレコードを表示すると文字化けしていて、[表示]-[テキストエンコード]-[UTF-8]にしたらうまいこと出たので、てっきりUTF-8で保存されてるんだと思ってました。チカッパさんからの連絡をきちんと見ておけばよかった。。
なお、こちらのSQL文を実行してみることで、保存されたフィールドの文字コードがわかるようです。参考にさせていただいたサイトさんです。
http://www.avant-tokyo.com/linux/mysql_character_set.html
詳しく調べずほいほい作るのはよくないです。反省。
Services_JSON
http://pear.php.net/pepr/pepr-proposal-show.php?id=198
チカッパよくある質問 MySQLのcharacterset
http://chicappa.jp/?mode=support&state=faq_a&g_id=7&id=396