Функция fgetcsv () не работает с двойными кавычками - PullRequest
0 голосов
/ 19 февраля 2020

У меня проблемы с простой функцией fgetcsv () PHP для чтения через мой CSV-файл, когда строка содержит двойные кавычки вокруг строки.

Файл автоматически генерируется и отправляется на сервер, где он получить чтение для импорта / обновления / удаления данных из базы данных. Иногда поле «описание» содержит двойные кавычки вокруг строки, поскольку строка может содержать ,.

Вот упрощенные данные из моего CSV.

my csv

Как видите, ничего особенного.

На данный момент у меня есть код.

<code>$fileHandle = get_home_path() . '/dealervu/test.csv';

$result = array();

if (($handle = fopen($fileHandle, "r")) !== FALSE) {

    // fgets($handle);

    while (($row = fgetcsv($handle, 0, ',')) !== FALSE) {
        $result[] = $row;
    }
    fclose($handle);
}

echo '<pre>';
print_r($result);
echo '
';

Обратите внимание, что я еще не обрабатываю header.

Когда я печатаю $result, я получаю что-то вроде этого.

Array
(
    [0] => Array
        (
            [0] => SKU
            [1] => Name
            [2] => Slug
            [3] => Description
        )

    [1] => Array
        (
            [0] => 9832-34WV,Red hat,red-hat,"Description test with quotes"
        )

    [2] => Array
        (
            [0] => 9832-35WV
            [1] => Blue hat
            [2] => blue-hat
            [3] => Description test without quotes
        )
)

Это будет ли тот же результат, например, если я установлю корпус и escape-символ на ".

Есть идеи, как я могу заставить его работать?

РЕДАКТИРОВАТЬ 1: похоже, двойная кавычка не очень хорошая

Я провел несколько тестов с различными типами кавычек, и результат сработал.

Использование символа Unicode (U + 201 C) работает.

Использование символа Unicode " (U + 0022) не работает.

enter image description here

Array
(
    [0] => Array
        (
            [0] => 9832-34WV
            [1] => Red hat
            [2] => red-hat
            [3] => “Description test with quotes”
        )

    [1] => Array
        (
            [0] => 9832-35WV
            [1] => Blue hat
            [2] => blue-hat
            [3] => Description test without quotes
        )

    [2] => Array
        (
            [0] => 9832-35WV,Blue hat,blue-hat,"Description test with quotes"
        )

    [3] => Array
        (
            [0] => 9832-35WV,Blue hat,blue-hat,"Description test with quotes, and comma"
        )

)

Вопрос о топи c все еще актуален для меня. Как я могу заставить его работать, если файл, который посылает мне программа, использует Unicode Character " (U + 0022)?

Я действительно понятия не имею, что не работает, так как у меня есть одинаковый код всех постов, которые я прочитал по этому вопросу.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...