Дополнительный пробел в первом значении csv при чтении с помощью php

<?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, и без первой строки кода все становится очень шатко, поскольку он не обнаруживает разрывы строк. Я создал и сохранил .csv в Excel. Любое понимание помогает, спасибо.

Вы используете блокнот или Excel для открытия / изменения файла? И что производит var_dump($csv)?

dustytrash 13.09.2018 19:47
0
1
178
1

Ответы 1

Я предполагаю, что в вашем файле действительно есть этот символ или скрытый символ перед ним.

Чтобы узнать, что это, откройте свой терминал. Если файл называется foo.csv, используйте:

hexdump -C foo.csv

Это даст вам шестнадцатеричный дамп вашего файла. Я почти уверен, что вы найдете скрытого персонажа до первых 4.

редактировать благодарит за размещение шестнадцатеричного дампа. Ваш файл содержит спецификацию UTF-8. Либо убедитесь, что все, что создает файл, не выводит спецификацию UTF-8, либо очистите файл перед его открытием.

Написание спецификации UTF-8 в большинстве случаев больше не выполняется с помощью современного программного обеспечения. Я не думаю, что это больше рекомендуется, но какое-то программное обеспечение все еще может это делать.

если я сделаю это, я получу 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

Lyres 13.09.2018 19:49

есть ли способ удалить это с помощью php?

Lyres 13.09.2018 20:02

Другие вопросы по теме