этот код создает файл 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);