【发布时间】:2014-08-26 20:40:46
【问题描述】:
我有一段代码可以从 CSV 文件中读取值,所有这些都可以正常工作,然后每个单独的记录都经过验证并用于对外部源的 API 调用,所有这些都可以正常工作。
今天我上传了一个 CSV 文件,当我打开它时,CSV 中每个条目的末尾似乎有 3 个空格,这导致 API 调用失败。
我尝试过使用trim(),但它没有任何作用,我也尝试过使用preg_replace('/^((?=^)(\s*))|((\s*)(?>$))/si', '', $pValue),这也没有任何影响。
我在 Notepad++ 中打开 CSV 文件并启用它以显示所有符号,显然有 3 个空格以及 CR 和 LF。
以前有没有人遇到过这样的问题,下面的代码 sn-ps 和键盘上的示例。
编辑:
示例:http://codepad.org/DfjzPcUU
代码 sn-ps,如果需要更多,请告诉我。
$vCSVData = self::getCSVData($vPendingFilePath);
foreach ($vCSVData AS $vKey => $vValue)
{
echo self::getNubmer($vValue);
...
}
getCSVData():
private function getCSVData($pFilePath)
{
return call_user_func_array('array_merge', array_map('str_getcsv', file($pFilePath, FILE_SKIP_EMPTY_LINES)));
}
CSV 文件片段:
Blue Table
Green Chair
Temp. Table
【问题讨论】:
-
“我试过使用 trim() 但它什么也没做” - 听起来你的代码有问题。
-
我们必须能够重现问题。发布一个 CSV 的小样本会更容易做到这一点。您的代码也可能显示出明显的问题(也许您正在尝试
trimCSV 文件中的整行。) -
有时空格不是空格,而是制表符或许多其他字符之一
-
你做这一切是因为你在解析一个csv?!使用正确的功能! php.net/fgetcsv。一个有效的 CSV 可以具有跨多行的同一行 - 您当前的方法不适用于此。
-
@atallon 如果您使用了 trim 并且它不起作用,那么您没有正确使用它或者那些不是空格。废弃这个问题中关于 csvs、apis、上传等的所有内容,并给我们一些大头钉:提供一个带有填充的字符串以及 trim 不能使用它。
标签: php csv whitespace