02時43分46秒ハマりネタ2発目。普段は自分の開発PC(WinXP)上のApache+PHPで開発を行っているのだが、試験用のデータを登録するため、本番系のサーバで動作させてみた。今回動作させたのが、CSVファイルのアップロードなのだが、かなり不可思議な現象に見舞われた。アップしたCSVのデータのうち、マルチバイトの文字が欠落するのだ。それも全部が全部ではなく、二重引用符や丸括弧で囲っているデータは大丈夫で、それ以外の文字が落ちるという現象だ。:)のように、最初のフィールドでは「注文ID(消さないでください)」の「注文」部分のみが欠落、次のフィールドではすべての文字(すべてマルチバイト文字)が欠落、といった感じで、どうもシングルバイト文字が出現するまで無視されているような感じになるのだ。fgetcsv()で読み込む前に、アップロードしたファイルを一括して文字コードを変更し、それを読み込む処理をしているのだが、文字コード変換後のファイルをfile_get_contents()でダンプしてみると、特に文字化けもしていない。print_r()の結果を見たところ、フィールドの区切りも誤認識しているわけではないし、さらに、自分の開発PC上ではまったく同じコード・同じデータで問題が発生していない。なってるやらさっぱり。PHP5のfgetcsv()関数について」と、大いに関係ありそうな記事が見つかった。ロケールの設定に依存します。PHP5のfgetcsv()関数についてとのこと。UTF-8のCSVファイルについてはfgetcsv()は希望通りに動作しました。PHP5のfgetcsv()関数についてとあったので、試してみたら、これビンゴ。PHP.INIの設定の違いだったのかなぁ。一瞬自前でCSVデコードせにゃならんかと思って結構鬱になったりならなかったりだったが、なんにしても解決策(というか回避策?)が見つかってほっとした。バッドノウハウくさい気もするが。PHP.INIを見直しておくかなぁ。[コメント(0)|トラックバック(1)]コメントコメントをどうぞ※メールアドレスとURLの入力は必須ではありません。入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。※なお、送られたコメントはブログの管理者が確認するまで公開されません。http://dara-j.asablo.jp/blog/2007/10/10/1846192/tb※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。使っていたプログラムで、サーバー移行したところ、文字化けになり、動かなくなってしまった。吊ブックマークレットtumblrのキーボードショートカットが便利になっとる。Chrome編dataスキームの画像をブロックしてみるローカルストレージを確認したり消したりするブックマークレットそうそう、いまさらTwitter始めました。(9)このブログについてJavaScriptとかC#とかPHPとか。