0

CSV ファイルを入力として処理するモジュールがあります。私のチームの誰かが Microsoft Excel を使用して csv を作成し始めるまで、私の Ubuntu マシンでは問題なく動作します。

その結果、新しい入力 CSV には ^M ( \r\n ) 文字が含まれているため、コードは CSV が 1 行のみで構成され、すべてのデータが $header に入力されると想定しています。

php.net がテキストを t モードで開くことを推奨しているため、読み取りモードを「rt」に変更しましたが、問題はまだ存在します。rt は、Windows が \n を \rn に変換する場合にのみ機能するようです。

PHP.NET から: Windows は、ファイルを操作するときに透過的に \n を \r\n に変換するテキストモード変換フラグ ('t') を提供します。対照的に、「b」を使用して、データを変換しないバイナリ モードを強制することもできます。これらのフラグを使用するには、モード パラメータの最後の文字として「b」または「t」を指定します。

できればPHPコードのみを変更することで、両方の種類の改行( Microsoft と UNIX )を受け入れる方法はありますか? dos2unix (ubuntu の fromdos) コマンドがあることは理解していますが、最新の Ubuntu にはデフォルトでこれがなく、他のユーティリティのインストールを控えたいと考えています。

以下は私の現在のソースコードです:

        $row = 1;
        if (($handle = fopen($file, "r")) !== FALSE)
        {
            while (($data = fgetcsv($handle)) !== FALSE)
            {
                $num = count($data);

                if($row == 1)
                {
                    $header = $data;
                }else
                {
                    $rows[$row-1] = $data;
                }
                $row++;
            }
            fclose($handle);
        }
4

1 に答える 1

2

auto_detect_line_endings

ini_set('auto_detect_line_endings',true);
于 2013-11-01T03:06:30.247 に答える