fgetcsv () ошибочно добавляет двойные кавычки в первый элемент первой строки

У меня очень любопытная проблема с fgtcsv (). Посмотрите на этот код

  $csv_check = fopen(CSV_DIR.$this->db_table.".csv","r");
$data = fgetcsv($csv_check, 1000, $this->fields_terminated_by);
fclose($csv_check);

Print_r ($ data) выводит следующее:

array (
0 => '"program_id"',
1 => 'program_name',
2 => 'program_logo',
)

Любопытно, что $ data [0] здесь заключена в двойные кавычки … Исходная строка в этом CSV-файле выглядит следующим образом:

"program_id";"program_name";"program_logo"

Я совсем не понимаю … Подсчет символов $ data [0] с помощью strlen ($ data [0]) возвращает 15, даже если они указаны неверно, это должно быть 12 символов … Я очень ошеломлен …!

Есть идеи?!?

5

Решение

Я знаю, что это старая тема, но как кто-то может прийти, как я, и попытаться найти решение, вот как это исправить.

Откройте блокнот (в моем случае я использовал notepad ++) и создайте новый файл.
Скопируйте / вставьте все данные в новый файл.
Сохраните его как «All type» и добавьте «.csv» самостоятельно.
Файл должен быть сохранен без спецификации, и вы можете обработать чтение CSV-файла с помощью PHP.

1

Другие решения

От Заметки PHP.net:

Когда символ спецификации предоставлен, fgetscsv может появиться, чтобы обернуть первый элемент в «двойные кавычки». Самый простой способ игнорировать это — перед тем как использовать указатель файла на 4-й байт. fgetcsv,

<?php

// BOM as a string for comparison.
$bom = "\xef\xbb\xbf";

// Read file from beginning.
$fp = fopen($path, 'r');

// Progress file pointer and get first 3 characters to compare to the BOM string.
if (fgets($fp, 4) !== $bom) {
// BOM not found - rewind pointer to start of file.
rewind($fp);
}

// Read CSV into an array.
$lines = [];
while (!feof($fp) && ($line = fgetcsv($fp)) !== false) {
$lines[] = $line;
}
0

По вопросам рекламы [email protected]