【问题标题】:PHP - Unable to remove whitespace from stringPHP - 无法从字符串中删除空格
【发布时间】:2014-08-26 20:40:46
【问题描述】:

我有一段代码可以从 CSV 文件中读取值,所有这些都可以正常工作,然后每个单独的记录都经过验证并用于对外部源的 API 调用,所有这些都可以正常工作。

今天我上传了一个 CSV 文件,当我打开它时,CSV 中每个条目的末尾似乎有 3 个空格,这导致 API 调用失败。

我尝试过使用trim(),但它没有任何作用,我也尝试过使用preg_replace('/^((?=^)(\s*))|((\s*)(?>$))/si', '', $pValue),这也没有任何影响。

我在 Notepad++ 中打开 CSV 文件并启用它以显示所有符号,显然有 3 个空格以及 CRLF

以前有没有人遇到过这样的问题,下面的代码 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 的小样本会更容易做到这一点。您的代码也可能显示出明显的问题(也许您正在尝试 trim CSV 文件中的整行。)
  • 有时空格不是空格,而是制表符或许多其他字符之一
  • 你做这一切是因为你在解析一个csv?!使用正确的功能! php.net/fgetcsv。一个有效的 CSV 可以具有跨多行的同一行 - 您当前的方法不适用于此。
  • @atallon 如果您使用了 trim 并且它不起作用,那么您没有正确使用它或者那些不是空格。废弃这个问题中关于 csvs、apis、上传等的所有内容,并给我们一些大头钉:提供一个带有填充的字符串以及 trim 不能使用它。

标签: php csv whitespace


【解决方案1】:

事实证明,我认为空白实际上是 ASCII 194 个字符(感谢 MikeB)来解决这个问题,因为 trim、rtrim、preg_replace、str_replace 与正常的" "(空白)检查没有' t 工作下面的 sn-p 对我有用。

preg_replace("/[\xA0\xC2]/", "", "Table   ")

xA0 是 char 160,xC2 是 char 194。

您也可以在这种情况下使用 trim 通过使用以下语句,使用 trim 而不是 preg_replace 处理时间稍微快一些,也就是说每种情况下的开销和差异可以忽略不计,在我的情况下,任何一个都足够了。

trim("Table   ", "\xA0\xC2")

示例:http://codepad.org/8H5Ut2KA

我能够通过使用以下代码 sn-p 找出“空格”是什么:

var_dump(ord($vString{5}));

【讨论】:

  • @derp,感谢您的提醒,我更喜欢使用 trim 而不是 preg_replace 因为 trim 的开销较小,即使这两种情况下的开销都非常小。
猜你喜欢
  • 1970-01-01
  • 2012-03-25
  • 2015-09-22
  • 2021-12-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 2017-11-20
相关资源
最近更新 更多