【问题标题】:Extra space in first value of CSV when reading with PHP使用 PHP 读取时 CSV 的第一个值中的额外空间
【发布时间】:2018-09-13 17:43:30
【问题描述】:
<?php
ini_set('auto_detect_line_endings', TRUE);
$csv = array_map('str_getcsv', file('Testcsv.csv'));
print_r($csv);

此代码解析看起来像这样的 Testcsv.csv 文件..

4,5,6,7,8
9,10,11,12,13
0,1,3,2,15

然而最后一个打印语句返回

Array
(
    [0] => Array
        (
            [0] =>  4
            [1] => 5
            [2] => 6
            [3] => 7
            [4] => 8
        )

    [1] => Array
        (
            [0] => 9
            [1] => 10
            [2] => 11
            [3] => 12
            [4] => 13
        )

    [2] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 3
            [3] => 2
            [4] => 15
        )

)

vardump($csv) 产生

array(3) {
    [0]=>
  array(5) {
        [0]=>
    string(4) " 4"
        [1]=>
    string(1) "5"
        [2]=>
    string(1) "6"
        [3]=>
    string(1) "7"
        [4]=>
    string(1) "8"
  }
  [1]=>
  array(5) {
        [0]=>
    string(1) "9"
        [1]=>
    string(2) "10"
        [2]=>
    string(2) "11"
        [3]=>
    string(2) "12"
        [4]=>
    string(2) "13"
  }
  [2]=>
  array(5) {
        [0]=>
    string(1) "0"
        [1]=>
    string(1) "1"
        [2]=>
    string(1) "3"
        [3]=>
    string(1) "2"
        [4]=>
    string(2) "15"
  }
}    

无论我做什么或如何格式化 csv,第一个值总是会在其前面推入一个空白空间。在这种情况下,“4”而不是“4”。我不明白为什么。我在一台mac电脑上,没有第一行代码,事情变得非常不稳定,因为它没有检测到换行符。我在 Excel 中创建并保存了 .csv。任何见解都会有所帮助,谢谢。

【问题讨论】:

  • 你是用记事本还是excel来打开/修改文件?还有var_dump($csv) 会产生什么?

标签: php csv multidimensional-array


【解决方案1】:

我的猜测是你的文件实际上有那个字符,或者它前面有一个隐藏字符。

要找出它,请打开您的终端。如果文件名为“foo.csv”,请使用:

hexdump -C foo.csv

这将为您提供文件的十六进制转储。我几乎可以肯定你在前 4 个之前找到了一个隐藏角色。

编辑感谢您发布 hexdump。您的文件包含 UTF-8 BOM。要么确保创建文件的任何内容都不会输出 UTF-8 BOM,要么在打开文件之前清理文件。

编写 UTF-8 BOM 大多不再由现代软件完成。我认为不再推荐它,但某些软件可能仍会这样做。

【讨论】:

  • 如果我这样做,我会得到00000000 ef bb bf 34 2c 35 2c 36 2c 37 2c 38 0d 39 2c 31 |...4,5,6,7,8.9,1| 00000010 30 2c 31 31 2c 31 32 2c 31 33 0d 30 2c 31 2c 33 |0,11,12,13.0,1,3| 00000020 2c 32 2c 31 35 |,2,15| 00000025
  • 有没有办法可以使用 php 删除它?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2015-12-21
  • 2012-12-04
  • 1970-01-01
  • 2014-09-14
相关资源
最近更新 更多