У меня проблемы с простой функцией fgetcsv () PHP для чтения через мой CSV-файл, когда строка содержит двойные кавычки вокруг строки.
Файл автоматически генерируется и отправляется на сервер, где он получить чтение для импорта / обновления / удаления данных из базы данных. Иногда поле «описание» содержит двойные кавычки вокруг строки, поскольку строка может содержать ,
.
Вот упрощенные данные из моего 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) не работает.
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)?
Я действительно понятия не имею, что не работает, так как у меня есть одинаковый код всех постов, которые я прочитал по этому вопросу.
Спасибо.