Избегайте котировок по умолчанию из csv, используя fputcsv
fputcsv($fp, $array, ',', '"'); // OR fputcsv($fp, $array);
В test.csv
testname,045645765789,"""04.07.2012 12:10:52"""
Как избежать вышеуказанных цитат?
Как ниже
testname,045645765789,04.07.2012 12:10:52
Две двойные кавычки используются для выхода из двойных кавычек, поэтому похоже, что дата и время уже указаны. Если вы просто хотите получить правильно цитируемый CSV, вы можете попробовать удалить любые существующие двойные кавычки (это может быть немного грубой силой):
$array = array('testname',045645765789,'"04.07.2012 12:10:52"'); $array = str_replace('"', '', $array); fputcsv($fp, $array); // Output: testname,79323055,"04.07.2012 12:10:52"
fputcsv
хочет помещать что-то вокруг строки с пробелом в ней, поэтому, если вы не хотите никаких кавычек вообще, вам придется либо обойтись, либо сделать свою собственную функцию, чтобы делать то, что вы хотите. В этом вопросе есть много хороших решений ( изменить : это была другая ссылка). Кроме того, в комментариях руководства PHP имеется ряд других решений.
На основе первой ссылки вы можете:
$array = array('testname',045645765789,'"04.07.2012 12:10:52"'); $array = str_replace('"', '', $array); fputs($fp, implode($array, ',')."\n"); // Output: testname,79323055,04.07.2012 12:10:52
Я знаю, что это старый вопрос, но у меня была аналогичная проблема, и в конечном итоге я отказался от fputcsv
и просто fputcsv
на него соответствующими заголовками, чтобы сообщить браузеру загрузить файл. Я знаю, что это не относится конкретно к проблеме с fputcsv
но учитывая количество времени, которое я потратил на это, и понял, что нет решения проблемы пространства (за исключением того, что, скорее всего, больше работы, чем проблема, если это даже возможно) , Я пошел с самым простым решением. Если целью является создание динамического загружаемого CSV-файла, то приведенный ниже код выполняет задачу довольно легко и гибко. Моя проблема заключалась в том, что мне нужно, чтобы все поля были обернуты в двойные кавычки, как требуется службой, которую я использую. Но некоторые поля имели пробелы, что означает, что одна (или двойная) цитата автоматически добавляется fputcsv
и это означает, что я получил значения типа "'this is a value'"
. Независимо от того, что я пробовал, он не выводит данные правильно. Таким образом, это решает его (однако, он НЕ использует fputcsv
но я не думаю, что это необходимо, так как результат тот же):
$filename="my_file.csv"; header("Content-Type: text/csv; charset=utf-8"); header("Content-Disposition: attachment; filename=$filename"); for ($i=0; $i<=10; $i++) { $value1 = "Here is some value"; $value2 = "Here is another value"; $value3 = "Another value"; echo $value1 . ","; echo $value2 . ","; echo $value3; if ($i != 10) echo "\n"; //only add new line if it's not the last line }
Вы также можете переносить значения в двойные кавычки, если захотите, как я сделал, делая что-то вроде этого:
for ($i=0; $i<=10; $i++) { $value1 = "Here is some value"; $value2 = "Here is another value"; $value3 = "Another value"; echo '"'. $value1 . "\","; echo '"'. $value2 . "\","; echo '"'. $value3 . "\""; if ($i != 10) echo "\n"; //only add new line if it's not the last line }
Надеюсь, это сэкономит время, если у них возникнут проблемы с этой конкретной проблемой форматирования.