ひとりまとめ

もろもろのメモ

JSONでアラート:Uninitialized string offset

PHPFlashとの間をやりとりしようとするとXMLとか使うことが多いようですが、お互いプログラム。配列は配列のままで受け取れると楽なこともあります。
そんなときうってつけなのがJSONっていうもの。詳しい説明は他所にオマカセするとして、requireして使うだけで、すぐに利用できてとっても便利です。


で、そのJSONPEARの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