[PHP-dev 88] Re: ようこそ "PHP-dev" メーリングリストへ (Digest mode)
saito
php-dev@php.gr.jp
Fri, 02 Nov 2001 18:05:49 +0900
はじめまして。
PHP Version 4.0.2のコマンドライン版で、fgetcsvで、日本語コードの文字が欠ける
といった現象が発生しています。
PHPは、以下のconfigureオプションで生成しています。
./configure --with-oci8 --enable-sigchild --with-zlib --with-png
--enable-track-vars --enable-force-cgi-redirect --enable-jstring=shared
--enable-mbregex=shared
ShiftJIS設定にしています。
プログラムリストは次の通りです
<?php
$b = array();
$b[0] = "./20011113_0001.csv";
$b[1] = "./20011113_0002.csv";
$b[2] = "./20011113_0003.csv";
//ファイル検索
for( $j = 0; $j < count($b) ; $j ++ ){
$fp = fopen($b[$j],"r") or die("ファイル読込みでエラーが発生しました。");
$a = array();
while($a = fgetcsv( $fp , 2000 )){
for( $i = 0 ; $i < count($a) ; $i ++ )
echo $a[$i]." ";
echo "<BR>\n";
if( (count($a) == 13)&&(ereg("^[0-9]{14}$",$a[1]))&&
(ereg("^[0-9]*$",$a[10]))&&(ereg("^[0-9]*$",$a[11]))&&(ereg("^[0-9]*$",$a[12]))&&
(ereg("^[0-9]*$",$a[8])) ){
$arraydate = getdate();
$datetime =
$arraydate["year"].sprintf("%02d",$arraydate["mon"]).
sprintf("%02d",$arraydate["mday"]).sprintf("%02d",$arraydate["hours"]).
sprintf("%02d",$arraydate["minutes"]).sprintf("%02d",$arraydate["seconds"]);
}
}
fclose( $fp );
}
?>
データファイル次の内容で 20011113_0001.csv 〜 20011113_0003.csvを作成
002,20011000000000,●●●●●●●●●●●●●●●●●●●●●●●●●●●●●
●●●●●●●●●,1,白水 りえ,●●●●●●●
●,xxxxxxxxxxx@xxx.xxx.xx.xx,000-0000,00,●●●●●●●,000,000,0000
以上のファイルを実行すると
002 〜中略〜 1 白水 りえ 〜中略〜
002 〜中略〜 1 白水 り 〜中略〜
002 〜中略〜 1 白水 り 〜中略〜
という出力になります。
2件目以降のカンマの直前の「え」という文字で、かなりの確立で文字欠けが生じます。
if文の中の処理を省くと文字化けは発生しなくなります。
また、fgetとsplitでcsvを分離した場合は正常に動作します。
fgetcsvとgetdateの相性が悪かったりするのでしょうか?それともfgetcsvにバグがあ
るのでしょうか?
今後fgetcsvを使用していいものかどうか悩んでいます。
古いバージョンの話で申し訳ありませんが、何か知っている方がおられたら御回答お
願いします。
斉藤 彰良