[PHP-users 12984] fgetcsv()について

Nobuyuki.Fukuoka php-users@php.gr.jp
Tue, 4 Feb 2003 15:35:49 +0900


福岡です。

fgetcsv()の第3引数に '\t'(タブ)を指定し、
対象ファイルに日本語が含まれていた場合に、
日本語部分が文字化けを起こすという現象に悩んでいます。

タブ区切で作成されたエラーメッセージファイルを読むという処理なのですが、
文字コードは、プログラム/メッセージファイル共にEUC-JPです。

例)
メッセージファイル

    00000   データベースアクセス時にエラーが発生しました。

    00100   ユーザ情報管理テーブルへのアクセス時にエラーが発生しました。
    00101   ユーザ情報管理テーブルの読み込み時にエラーが発生しました。
    00102   ユーザ情報管理テーブルの更新時にエラーが発生しました。
    00103   ユーザ情報管理テーブルへのデータ挿入時にエラーが発生しまし
た。

プログラム(読み込み部分)

    1:    if( !( $fn = @fopen( "dgx_error.msg", "r" ) ) ){
    2:        $msg = ERROR_DEFAULT_MSG;
    3:    }
    4:    else{
    5:        while( $rec = fgetcsv( $fn, 1000, "\t" ) ){
    6:            $v = trim( $rec[1] );
    7:            $rec[0] = trim($rec[0]);
    8:            if( $rec[0]{0} === '#' ){   continue;   }
    9:            if( $rec[0]{0} === '' ){    continue;   }
   10:            $msgTable[$rec[0]] = $v;
   11:         }
   12:         fclose( $fn );
   13:     }

    trim()の直前に生データを出力させて見ましたが、
    やっぱり化けてしまうので、
    fgetcsv()で行を取得した際に既に文字化けを起こしていると思います。
    以下に環境を示します。configure や php.ini での設定で
    関連する箇所はやはり mb_string あたりなのでしょうか?


環境
System:SunOS draco 5.9 Generic_112233-02 sun4u
PHP:4.3.0
    configure: './configure' '--with-pgsql'
'--with-apxs=/export/home0/dgx-admin/apache/bin/apxs'
Apache:1.3.27

よろしくお願い致します。

*---------------------------------------*
K 三菱電機情報ネットワーク株式会社
A インターネットシステム部 第1課
P
P 福岡 伸行
A E-Mail : fukuoka@tyo.mind.co.jp
*---------------------------------------*