Создание CSV-файла из таблицы MySQL с использованием php

этот код создает файл csv. Однако я избегал печатать запятые в полях, потому что он используется в качестве разделителя (см. Строку 22). Теперь я хочу удалить (каретки и новые строки) из полей. Добавление $ somecontent. = Str_replace ("\ n", "", $ val); в строке 23, похоже, не работает. есть идеи?

@chmod($export_csv, 0777); $fe = @fopen($export_csv."/export.csv", "w+"); if($fe){ $somecontent = ""; $fields_count = 0; // print field headers $db->query($sql_view); if($row = $db->fetchAssoc()){ foreach($row as $key => $val){ if($fields_count++ > 0) $somecontent .= ","; $somecontent .= ucfirst($key); } } $somecontent .= "\n"; // print field values $db->query($sql_view); while($row = $db->fetchAssoc()){ $fields_count = 0; foreach($row as $key => $val){ if($fields_count++ > 0) $somecontent .= ","; $somecontent .= str_replace(",", "", $val); $somecontent .= str_replace("\n", "", $val); } $somecontent .= "\n"; } // write some content to the opened file. if (fwrite($fe, $somecontent) == FALSE) echo 'file_writing_error'." (export.csv)"; fclose($fe); } 

Где ваш $somecontent .= str_replace("\n", "", $val) ? Я не могу найти его в вашем коде.

Вы можете указать массив как первый параметр для str_replace как указано там . Таким образом, он заменит каждую строку, присутствующую в вашем массиве, вторым параметром.

Например, $somecontent .= str_replace(array("\n", "\r"), "", $val);

Используйте функцию fputcsv для записи CSV-файлов. У PHP уже есть функция для записи файлов csv.

Вам не нужно обращаться с экранированием, разделителем самостоятельно, все это уже обрабатывается.

Это позволит вам справиться со всеми этими вещами и избавит вас от многих головных болей.

Вы можете сделать это непосредственно с MySql :

 SELECT col1, col2, col3 INTO OUTFILE '/tmp/export.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n' FROM test_table; 

вы можете попробовать что-то вроде этого, играя с ASCII-символами

 $somecontent .= str_replace(CHR(10), " ", $val); $somecontent .= str_replace(CHR(13), " ", $val);