@artyomkulakov

PHP: почему fgetcsv так себя ведет?

Есть csv файл. В нем разделителем является запятая, а роль экранирующего символа исполняют двойные кавычки.
Пример первых двух строк:
- "Название, Улица, Дом", 123, фирма, "Название1 (не относящиеся к первой строке)"
- "Название, Улица, Дом", 456, фирма, "Название2 (не относящиеся к первой строке)"
Стоить отметить, что первая ячейка первой строки и первая ячейка второй строки имеют одинаковое содержание.

Файл разбирается следующим образом:
$source_csv = fopen("/путь/название_файла.csv","r");
while (($csv_line = fgetcsv($source_csv)) !== FALSE) {
    $parsed_csv[] = $csv_line;
}
fclose($source_csv);


Далее работая с этими строками, я заметил, что для первой строки результат обработки выходит кривой.
Вывел посмотреть отличия:
print_r($parsed_csv[0]);
print_r($parsed_csv[1]);


Получаю:
Array
(
    [0] => "Название
    [1] =>  Улица
    [2] =>  Дом"
    [3] => 123
    [4] => Фирма
    [5] =>  Название1 (не относящиеся к первой строке)
)
Array
(
    [0] => Название, Улица, Дом
    [1] => 456
    [2] => Фирма
    [3] =>  Название2 (не относящиеся к первой строке)
)


Попытки модификации первой строки и копирования других строк вместо первой приносили такой же результат. Как костыль сработало следующее: перед разбором добавляю в считанный файл в самое начало строку с пустыми значениями (,,,), а потом делаю unset($parsed_csv[0]). Костыли, это конечно хорошо (нет, не хорошо), но хотелось бы найти православное решение данной проблемы.
  • Вопрос задан
  • 687 просмотров
Решения вопроса 1
@artyomkulakov Автор вопроса
Нашел проблему. Файл был в кодировке UTF-8 с BOM. Ремувим BOM - проблема исчезает
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 14:12
30000 руб./за проект
19 апр. 2024, в 14:10
500 руб./за проект