1

我有一个 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,
4

2 回答 2

2

适当地设置auto_detect_line_endings选项。

于 2012-04-30T15:41:13.370 回答
0

您不能更改代码以查找 ^M 或将 ^M 替换为 \n 吗?

str_replace("^M", "\n", $input);
于 2012-04-30T15:42:14.200 回答