[PHP-users 17540]Re: SJIS-EUC変換時の文字化け

ISIGE, Akira xia @ silvia.com
2003年 8月 27日 (水) 15:49:57 JST


いしげ です.

On 2003/08/27 15:23:54 JST,
Osamu Shigematsu <m5issige @ mr.hitachi-medical.co.jp> wrote:

> while ($line = fgets($fp)) {
> 	$line = mb_convert_encoding($line, "EUC-JP", "SJIS");
> 	$cols = mb_split('CSVの項目に分ける正規表現', $line);

MS の正式仕様(?) を知っているわけではありませんが,
経験的に,Excel はセル内に改行コードを含んでもよく,
その CSV 出力は "hoge\nmoge" といった風に "" の中に直接改行が入ります.
ですので,そういう(ある意味,変な)CSV には fgets 使用は適しませんね.

# そういえば「詳説 正規表現」では \ で " を escape する例がありましたが,
# 確かにそういう CSV って今までほとんど見たことないです.


参考までに,自分は BlueShoes の Bs_CsvUtil.class.php を利用してます.

> http://www.blueshoes.org/en/framework/util/csv_util/

----(example)----
require_once 'Bs_CsvUtil.class.php';
$csv = new Bs_CsvUtil();
$data = $csv->csvFileToArray( 'hoge.csv', ',' );
foreach( $data as $row ){
  foreach( $row as $column )
    print $column;
  }
}
-----------------

日本語で問題が起こることもなさそうですし,
Excel の出力した CSV をこれで読ませてエラーになったことも経験上ありません.

ご利用の際はライセンス条項もご確認ください.


--
ISIGE, Akira



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