2012-04-30 12 views
1

私は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, 
+2

ただ、野生の推測:多分 '$ CSV = str_replace( "^ M"、PHP_EOL、$のcsv);' –

+0

@tsmij:それに伴う問題は、PHPでも^ M」というを認識していなかったということです'、つまりsubstr_count($ csv、 "^ M")が0を返しました。下記のIngacioのソリューションが私のために働いていました。 – hellsgate

+1

それは '\ r'だからです。 –

答えて

0

^Mを探すか、^ Mを\ nで置き換えるようにコードを変更することはできますか?

str_replace("^M", "\n", $input); 
+0

私はそれを試みましたが、PHPが最初に '^ M'を理解できないと信じる何かを置き換えるものではありません。 – hellsgate

関連する問題