我有一个PHP站点和一个cron作业,它运行以更新站点的数据库。 cron读取由第三方上传的CSV文件。最近这个cron工作停止了正常工作。经过一番调查,我发现问题出在CSV文件中。问题是CSV中的新行字符已从标准“\ n”更改为较旧的ASCII“^ M”,并且PHP似乎不会将其识别为新行,因此不将CSV视为多行,它将其视为一行信息。我只能在命令行文本应用程序less和vim中看到这种差异。有没有人知道让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,
答案 0 :(得分:2)
正确设置auto_detect_line_endings
选项。
答案 1 :(得分:0)
您是否可以更改代码以查找^ M或将^ M替换为\ n?
str_replace("^M", "\n", $input);