Оберните CSV-значения, сгенерированные PHP fputcsv (), с помощью ""

Таким образом, мой код генерирует CSV-файл, используя встроенную функцию fputcsv .

Для разделителя я использую ',' (запятую).
Для оболочки я использую '"' (двойную кавычку).

Однако, когда я пытаюсь что-то вроде

 fputcsv($file,array('a','b',"long string, with commas",NULL,''),',','"'); 

он выводит

 a,b,"long string, with commas",, 

но я бы хотел, чтобы он выводил

 "a","b","long string, with commas","","" 

Есть ли простой способ справиться с этим, или мне нужно написать замену для fputcsv ?

Solutions Collecting From Web of "Оберните CSV-значения, сгенерированные PHP fputcsv (), с помощью """

Обычно это не проблема для файлов CSV.

fputcsv ставит кавычки вокруг значения, если он будет неоднозначным. Например,

 a,b,"long string, with commas",, 

не является двусмысленным, но,

 a,b,long string, with commas,, 

является и будет в большинстве случаев (читать: все) интерпретировать CSV-считыватель как имеющий более 5 полей.

Парсеры CSV будут принимать строковые литералы, даже без кавычек вокруг них.

Если вам все равно нужны котировки вокруг значений, следующий фрагмент будет делать это. Он не избегает кавычек внутри строки – это упражнение остается для читателя:

 $row = '"' . implode('", "', $rowitems) . '"'; 

Вы хотели бы поместить это в цикл для всех своих строк.

Я работал над этим, вставив некоторые фиктивные строковые символы с пробелом # @ @ #, а затем удалив их. Вот пример реализации:

 //$exported is our array of data to export $filename = 'myfile.csv'; $fp = fopen($filename, 'w'); foreach ($exported as $line => $row) { if ($line > 0) { foreach ($row as $key => $value) { $row[$key] = $value."#@ @#"; } } fputcsv($fp, $row); } fclose($fp); $contents = file_get_contents($filename); $contents = str_replace("#@ @#", "", $contents); file_put_contents($filename, $contents); 

Это включает все поля в двойных кавычках, включая пустые

Я думаю, что решение будет таким,

 $order_header_arr = array("Item1", "Item2","This is Item3"); fputcsv($fp, $order_header_arr,',',' '); 

помните " " [Пробел] Между третьим параметром fputcsv

По какой-либо причине вы не можете str_replace (',,', ', "",', $ output); ? Вам также нужно будет увидеть, является ли последний или первый символ запятой, и если да, замените запятую «,»

fputcsv не будет включать все переменные массива в кавычки. Наличие числового значения массива без кавычек может быть правильным, но представляет собой проблему, когда ярлык или адресная программа сталкивается с числовым индексом почтового индекса США, потому что при печати он будет лишать начальные нули. Таким образом, 05123-0019 становится 5123-19.

Чтобы заключить все значения, независимо от того, существуют они или нет, в кавычках я читаю входной файл с помощью fgetsrc и записываю исправленную версию с использованием fwrite. fgetsrc считывает запись в переменные массива. Поскольку fwrite записывает переменную, вы должны вывести переменные массива, заключить их в кавычки и разделить переменную массива запятой. Затем добавьте разделитель записи.

 <?php // fgetcsv - read array with fgetcsv and string into output variable // then write with fwrite // $ar is the array populated from fgetcsv and $arc is the variable strung // with array variables enclosed in quotes and written using fwrite. $file_in = fopen("reinOCp.csv","r") or die("Unable to open input file reinOCp.csv!"); $file_out = fopen("printLABEL.csv", "w") or die("Unable to open output file prtLABEL!"); while (!feof($file_in)) { //loop through each record of the input file $ar=fgetcsv($file_in); //read the record into array $ar if (is_array($ar)){ //this loop will string all the array values plus // the end of record into variable $arc and then write the variable $arc = ""; //clear variable $arc foreach ($ar as $value) { $arc .= '"' . $value . '",'; // add the array values, enclose in // quotes with comma separator and store in variable $arc } $arc .= "\n"; //add end of record to variable $arc fwrite($file_out, $arc) or die ("ERROR: Cannot write the file"); //write the record using variable $arc } } echo "end of job"; fclose($file_in); fclose($file_out); ?>