【问题标题】:PHP weird "spaces"PHP 奇怪的“空格”
【发布时间】:2014-01-25 15:05:11
【问题描述】:

我在导入 csv 文件时遇到问题... 下面的代码给了我这样的东西:

array(3) { [0]=> string(1) "" [1]=> string(23) "Entfernung " [2]=> string(19) "1.3042 km" } 

如您所见,字符数与真实单词不匹配(“Entfernung”没有 23 个字符...)...

更深入的研究表明,不知何故,每个字符后面都有一个“不可见”的空白(例如。“E n t f e r n u n g”)...

我怎样才能摆脱它/或防止它?

代码($files = 带有文件名的数组):

 for ($i=0; $i < count($files); $i++) {
    $handle = fopen($files[$i], "r"); 
        while ($proc_file = fgetcsv($handle,0,",",";")) { 
        var_dump ($proc_file); 
    echo "<br>"; 
}

拆分例如“Entfernung”(=$proc_file[1]):

$test = $proc_file[1]; 
        for ($a=0; $a < strlen($test); $a++) {
            echo $test[$a]."-";             
        }

给我

-E--n--t--f--e--r--n--u--n--g-- --

【问题讨论】:

  • 很确定这意味着 23 个字节,而不是 23 个字符。
  • 都是ascii字符吗?
  • 您最好修复生成 CSV 文件的代码。
  • a) 我无法修复文件 - 它由 android 应用程序自动生成 b) 我认为这些是 ASCII 字符(但我不确定) c) 我认为这意味着 23 个字符.. . $var = "ABC DEF"; --> string(7) "ABC DEF"
  • 那些不是不可见的空格,它是 2 字节字符编码。这里是否存在实际错误或问题,或者您只是不喜欢字节数?

标签: php csv removing-whitespace


【解决方案1】:

您可能需要遍历 fgetcsv 返回的索引数组并清除所有空格

for ($i=0; $i < count($files); $i++) {
    $handle = fopen($files[$i], "r"); 
    while ($proc_file = fgetcsv($handle,0,",",";")) { 
        for($proc_file as $key => $val) {
            $proc_file[$key] = preg_replace('/\s+/', '', $val);
        }
    }
}

【讨论】:

  • 其余的还在吗?
  • 不幸的是......是的^^
  • 如果删除所有非字母数字(保留 .)会发生什么 preg_replace('/[^\da-z.]/i', '', $string);
  • 嗯...另一件事:preg_replace('/[^\da-z.]/i', '', $string);有效......但我至少也需要“:”......
  • 抱歉,回复迟了,preg_replace('/[^\da-z.:]/i', '', $string);
猜你喜欢
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
相关资源
最近更新 更多