web-dev-qa-db-ja.com

fgetcsvはmac形式のcsvファイルで終わる行の読み取りに失敗します、より良い解決策はありますか?

私はfgetcsv関数でphpを使用してcsvファイルを解析していました。それは行のすべてのコンテンツを解析し、後で私が見つけた、csvには「\ r」としての戻り値が含まれています。私が見た-それは前にPHPのバグとして報告されました。私はこれをPHPランタイム構成を設定することで解決しました-

ini_set("auto_detect_line_endings", "1");

それ以上の解決策はありますか、これは正しい方法ですか?

ありがとう

60
Musa

auto_detect_line_endingsの設定は、 php documentation で明示的に推奨されています。

ただし、2010年に\rで行を区切る理由を推測することはできません。可能であれば、UNIXスタイル\nに変換してください。

32
phihag

_\r_の行末は、CSVファイルとして保存するときにMicrosoft Excelによって作成されるため、Excelスプレッドシートで開始する場合、それを回避することはあまりありません。

_auto_detect_line_endings_を使用すると問題なく動作します。または、preg_replace("/\r\n|\n\r|\n|\r/", "\n", $subject);で行末を正規化できます

5
spekary