[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 メーリングリストの案内