我有一段代码从CSV文件中读取值,所有工作都是盛大的,然后每个单独的记录都经过验证,并在对外部源的API调用中使用,所有这些都很有效。
现在我上传了一个CSV文件,当我打开它时,它看起来在CSV中每个条目的末尾有3个空格,导致API调用失败。
我已尝试使用trim()
,但它没有做任何事情,我也尝试使用preg_replace('/^((?=^)(\s*))|((\s*)(?>$))/si', '', $pValue)
,这也没有任何影响。
我在Notepad ++中打开了CSV文件并启用它来显示所有符号,显然有3个空格以及CR
和LF
。
有没有人遇到过这样的问题,下面的代码片段以及键盘上的示例。
示例:http://codepad.org/DfjzPcUU
代码段,如果需要更多,请告诉我。
$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
答案 0 :(得分:4)
事实证明,我认为白色空间实际上是ASCII 194个字符(感谢MikeB)用于解决这个问题,作为trim,rtrim,preg_replace,str_replace与正常" "
(空白空间)检查没有工作,下面的代码片段对我有用。
preg_replace("/[\xA0\xC2]/", "", "Table ")
xA0是char 160,xC2是char 194。
你也可以在这个例子中使用trim来使用下面的语句,使用trim over preg_replace对处理时间稍微快一点,用表示每种情况下的开销和差别可以忽略不计,在我的情况下要么就足够了。 / p>
trim("Table ", "\xA0\xC2")
示例:http://codepad.org/8H5Ut2KA
我可以使用下面的代码片段找出“空间”的内容:
var_dump(ord($vString{5}));