[PHP-users 34271] Re: fgetcsv 関数でバグ !?

take t.takeyoshi @ gmail.com
2009年 2月 4日 (水) 14:48:12 JST


こんにちは。takeです。

自分もPHP4からPHP5への移行時に同じような現象に見舞われ悩んだ覚えがありました。
原因は「おく」さんなどがおっしゃられている通り
PHP5 の fgetcsv() はロケールの設定に依存することに拠ります。

ググってみるとこんなスレッドを見つけました。
http://ml.php.gr.jp/pipermail/php-dev/2005-November/001206.html

自分は以下のようにして解決しました。
http://rockstock2008.blog17.fc2.com/blog-entry-26.html



2009/02/04 14:26  <okuyama @ workgroup.jp>:
> おく@ITCOMです。
>
> 注意: この関数はロケール設定を考慮します。もし LANG が例えば en_US.UTF-8 の場合、 ファイル中の 1
> バイトエンコーディングは間違って読み込まれます。
>
>
> 2009/02/04 14:24 片桐 信治 <sin142857 @ yahoo.co.jp>:
>> 失礼しました。
>> コードは以下のようになっています。
>>
>> よろしくお願いします。
>>
>> function read_csv_plan($filename){
>> $retu="2";
>> $filename="csv/".$filename;
>> mb_internal_encoding('EUC-JP');
>> $myself = basename($_SERVER['SCRIPT_NAME']);
>>
>> $delimiter = mb_convert_encoding(",", 'EUC-JP',
>> 'SJIS-win');                    //CSV
>> 区切り文字
>> $infp=fopen($filename,"r");
>>    $ret=array();
>>    $num=0;
>>    while (($csv = fgetcsv($infp, 10000, $delimiter)) !==
>> FALSE) {
>>        $ret1=array();
>>        $ii=0;
>>        foreach ($csv as $key=>$val) {
>>            $ii++;      //1行目は読み飛ばす
>>            if($ii==$retu){
>>                if(!empty($val)){
>>                   $buff=$val;//$retu行目の配列内容を一
>> 時格納
>>                   $buff=mb_convert_encoding($buff,
>> 'EUC-JP', 'SJIS-win');//
>> コード変換
>>                   $num=0;
>>                 }else{$num++;}
>>            }elseif($ii>1){
>>               $val=mb_convert_encoding($val, 'EUC-JP',
>> 'sjis-win');//
>> コード変換
>>               $buff3=array_push($ret1,$val);
>>            }
>>        }
>>        $ret[$buff][$num]=$ret1;
>>    }
>>    fclose($infp);
>>   return $ret;
>> }
>>
>>
>>
>> --------------------------------------
>> Yahoo! JAPAN - Internet safety for children and parents.
>> http://pr.mail.yahoo.co.jp/security/
>> _______________________________________________
>> PHP-users mailing list  PHP-users @ php.gr.jp
>> http://ml.php.gr.jp/mailman/listinfo/php-users
>> PHP初心者のためのページ - 質問する前にはこちらをお読みください
>> http://oldwww.php.gr.jp/php/novice.php3
>>
>
>
>
> --
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> ■携帯初のフル3DオンラインRPG!!
> 『イルーナ戦記online』
> 5/12(月) i-mode メニューサイトオープン
> http://iruna.asobimo.com/
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> 2007/7/04
> CM王国β版 リリース
>
> http://cm-king.com/
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> ■無料ファイル転送
>
> SSL対応で安心!アスキーでも特集されました。
> http://postfile.jp
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> ■最新ゲームニュース
>
> 無料Flashゲーム20本遊び放題!
> http://www.gamingtv.jp/
> ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
> .    ・ .  +    : ゜.   ‥     ゜.  .
>  ‥     ゜.  .    .    ・.    ・ .  +
>   /  +    ゜.      ・ .  +    :
>
> ★               アイ・ティ・コム
>  彡彡ミ         奥山 敦二 (Atsuji Okuyama)
>  )∂∂b        mail:  okuyama @ workgroup.jp
>  ( ー  人__     msn : okuyama_vingt @ msn.com
>   ̄/)/    |
>    |` ̄    "\
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://oldwww.php.gr.jp/php/novice.php3
>


PHP-users メーリングリストの案内