Enclosure 是 enclosure 字段的字符。它是一种额外的分隔符。
例如hello,world有一个逗号作为field分隔符,并且没有text分隔符,而"hello","world"有一个引号作为text强>分隔符。一些系统使用分隔值和非分隔值分别表示文本和数字字段(我相信 Microsoft Excel 会这样做)。这允许字段在其值中包含字段分隔符:
"Hello,world","Second Field","Third, and last, field".
其他一些系统只包含包含字段分隔符的值或包含空格的值,这意味着在这些系统上未分隔的值不一定是数字。
如果您有一个“微不足道”的情况 - 未分隔的值,值内没有转义的字段分隔符(即,没有 'A,firstpartB\,secondpartB,C' 的东西) - 您可以完全跳过 CSV 转换并运行
$line = fgets($file, MAX_EXPECTED_LINE_LEN);
// This splits ' A, B, C ' into 'A', ' B' and ' C' (note spaces)
$row = explode(',', trim($line)); // other delimiters can be used
或
// Consider " , ", "," and ", " as the same delimiter
// i.e. ' Alpha , Beta , Gamma ' gets split into 'Alpha', 'Beta' and 'Gamma'
$row = preg_split('#\\s*,\\s*#', trim($line));
我似乎无法重现您遇到的问题;是否与行尾的不同编码(即 CRLF 而不是 LF)有关?
在紧要关头,您可以将fgetcsv 划分为fgets 和str_getcsv() 两个组件,操纵调用之间的界限(使用trim,或者如果情况更糟,则通过附加缺失的逗号)。