phpの fgetcsv について


例えばこういうデータを
--------------------
123,12345
12345,"12,345"
あああ,"222,222,222"
"さくら,杉",紅葉
--------------------

このようにして表示しようとすると
$fp = fopen("xxx.csv", 'r');
while ($line = fgetcsv($fp, 1000)) {
foreach ($line as $key => $val) {
print "$val,";
}
print "\n";
}

こうなってしまいます。
(行によって「"」が表示されてしまいます)

123,12345
12345,12,345
あああ,222,222,222
"さくら,杉",紅葉,


これは私の書き方がいけないのでしょうか?
それともこれが当たり前なのでしょうか?

よろしくお願いします。

回答の条件
  • 1人1回まで
  • 登録:2009/03/30 19:41:14
  • 終了:2009/03/30 22:47:26

ベストアンサー

id:pahoo No.1

pahoo回答回数5960ベストアンサー獲得回数6332009/03/30 20:27:21

ポイント60pt

処理的には合っていますが、日本語文字コードの指定がないのが原因かもしれません。

日本語文字コードを UTF-8 にして、区切り文字の処理が分かりにくかったので、下記のように書き換えてみました。試してみてください。

<?php
mb_internal_encoding('UTF-8');

$fp = fopen("hoge.csv", 'r');
while ($line = fgetcsv($fp, 1000, ',', '"')) {
    $i = 1;
    $n = count($line);
    foreach ($line as $val) {
        echo $val;
        $i++;
        if ($i <= $n)  echo '/';
    }
    print "<br />\n";
}
?>
id:worldtravel

ありがとうございます。

早速試しましたが、結果は一緒でした。

こうなりました。

123/12345

12345/12,345

あああ/222,222,222

"さくら/杉"/紅葉

サーバはSAKURAを利用しています。

phpもcsvもUTF-8で保存しています。

実は数年前からこの状況を知っていたため

あえてcsvは一切使わないようにしてきました。

ところが最近事情がありcsvを使う必要があるため

再度チャレンジしたのですがダメでした。

他に考えられる原因がありましたら教えてください。

よろしくお願いします。

2009/03/30 21:39:22
  • id:Mook
    本当に上記データで、「"」が残ったりしましたか?
    基本は囲い込み文字は表記されないはずでし、こちらではそのような現象は見れません。

    「"」が全角であったり、不整合であったりしないでしょうか。

  • id:fut573
    123,12345
    12345,12,345
    あああ,222,222,222
    さくら,杉,紅葉

    と表示したいのでしょうか?

  • id:worldtravel
    " は半角です。

    そうです fut573さんの書いているように表示したいのです
  • id:pahoo
    #1で回答した者です。
    CSVファイルは何で作成しましたか? BOM付UTF-8になっていませんか? BOMを外してみてください。
  • id:worldtravel
    おっ!! できました。

    ダメだったファイルはmacのエクセルで書き出したファイルです。

    同じ内容をテキストエディタにコピーしたファイルは上手くできました。

    windowsのエクセルで保存してもこうなるのでしょうか?
    いまwindows+エクセルが無いので明日試してみます。

    パフーさん、みなさんありがとうございました。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません