Я пытаюсь прочитать строку CSV, используя fgetcsv
. Однако, похоже, не все равно касается корпусов.fgetcsv не читает шкафы
Вот что линия выглядит следующим образом:
Super Administrator,"ROLE_SUPER_ADMIN, ROLE_GROUP_GUEST, ROLE_GROUP_WRITER, ROLE_USER_WRITER, ROLE_USER_GUEST"
Это действует линия по стандартам CSV, и он должен возвращать следующие с "
в качестве корпуса и ,
в качестве разделителя:
$l = fgetcsv($handle, 0, ',', '"');
array(
[0] => 'Super Administrator',
[1] => 'ROLE_SUPER_ADMIN, ROLE_GROUP_GUEST, ROLE_GROUP_WRITER, ROLE_USER_WRITER, ROLE_USER_GUEST',
);
Однако это то, что я получаю:
$l = fgetcsv($handle, 0, ',', '"');
array(
[0] => 'Super Administrator',
[1] => '"ROLE_SUPER_ADMIN',
[2] => ' ROLE_GROUP_GUEST',
[3] => ' ROLE_GROUP_WRITER',
[4] => ' ROLE_USER_WRITER',
[5] => ' ROLE_USER_GUEST"',
);
Так что да, кажется fgetcsv
прав, полностью игнорируя характер корпуса. Я попытался заставить его работать с использованием fgets
, а затем str_getcsv
, но результат тот же - str_getcsv
, скорее всего, вызван fgetcsv
для преобразования CSV.
Я полагал, что это может быть какая-то ошибка регрессии, которая нашла свой путь в версии PHP, я использую, так что я вставив результат команды php -v
здесь:
[email protected]:~/$ php -v
PHP 5.5.27-1+deb.sury.org~trusty+1 (cli) (built: Jul 15 2015 12:14:44)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies
Я считаю, что это это последняя версия PHP5 на момент написания этой статьи. Хотя я подозреваю, что это какая-то ошибка PHP, это также может быть проблемой установки/конфигурации, поэтому я публикую этот вопрос.
Кто-нибудь уже испытал это? Каков наилучший способ решить эту проблему?
EDIT:
Как отметил Марк Бейкер, PHP5.5.27-1 на самом деле последняя версия PHP5.5 в настоящее время.
EDIT 2:
Вот попытка с функцией bin2hex
, отображается с var_dump
.
Строка ",",","
(2 ячейки, содержащие только кома в каждой ячейке): 0022002c0022002c0022002c0022000a
.
С bin2hex('"')
результатом является только 22
.
str_getcsv
все еще дает мне эту ошибку.
5.6.11 - последняя версия PHP, а не 5.5.27 .... это только последняя ревизия в ветке 5.5. –
Но функция str_getcsv(), которая использует один и тот же код разбора, - работает правильно со всеми версии PHP назад до 5.3.0 (когда был введен str_getcsv()) .... вы абсолютно уверены, что оболочка в вашем файле является символом '' '(ASCII 0x22), а не' & quot' или аналогичным –
Спасибо за точность в отношении PHP-версии. О вашем втором комментарии, да, я уверен в этом. Фактически я использую LibreOffice (excel ripoff на Ubuntu), и это программное обеспечение, а не я, добавляет '' '. Даже при этом, когда я открываю файл в текстовом редакторе, отображается символ '' ', а не что-то еще. – Zephyr