私はPHPサイトとそのサイトのDBを更新するために動作するcronジョブを持っています。 cronは、第三者によってアップロードされたCSVファイルを読み込みます。最近、このcronジョブが正しく動作しなくなりました。何らかの調査の後、私は問題がCSVファイルにあることを発見しました。問題は、CSVの改行文字が標準の "\ n"から古いASCII "^ M"に変更され、PHPが改行として認識していないように見えるため、CSVを複数行で見る代わりに、それは情報の1つのラインとしてそれを見ている。私は、コマンドラインのテキストアプリでこの差を見ることができず、vimにしか見えませんでした。誰かがPHPにこれらの改行文字を認識させる方法を知っていますか?一例としてPHPで制御文字を解析するにはどうすればよいですか?
、間違ったCSVファイルはvimの中で次のようになります。
Heading 1,Heading 2,Heading 3,^MInfo 1-1,Info 1-2,Info 1-3,^MInfo 2-1,Info 2-2,Info 2-3,^M^M
vimの中にこのような古い(正しい)バージョンが表示さ一方:セット
Heading 1,Heading 2,Heading 3,
Info 1-1,Info 1-2,Info 1-3,
Info 2-1,Info 2-2.Info 2-3,
ただ、野生の推測:多分 '$ CSV = str_replace( "^ M"、PHP_EOL、$のcsv);' –
@tsmij:それに伴う問題は、PHPでも^ M」というを認識していなかったということです'、つまりsubstr_count($ csv、 "^ M")が0を返しました。下記のIngacioのソリューションが私のために働いていました。 – hellsgate
それは '\ r'だからです。 –