uso questa funzione per ciascun valore CSV passare correttamente. Cita un valore solo se contiene nuovi simboli di linea, virgolette doppie o separatori. In realtà, l'unico valore da evitare è il simbolo delle doppie virgolette. Tutto il contenuto di altre celle viene inserito e visualizzato correttamente in Excel.
Controllato con varie versioni di Excel e parser CSV ODBC in locale cirillico sotto Windows.
/**
* This function escapes single CSV value if it contains new line symbols, quotes or separator symbol and encodes it into specified $encoding.
*
* @param string $source - origin string
* @param string $sep - CSV separator
* @param string $source_encoding - origin string encoding
* @param string $encoding - destination encoding
*
* @return string - escaped string, ready to be added to CSV
*
* @example echo escapeStringCSV("Hello\r\n\"World\"!");
* will output
* "Hello
* ""World""!"
*/
function escapeStringCSV($source, $sep=';', $source_encoding='utf-8', $encoding="windows-1251//TRANSLIT"){
$str = ($source_encoding!=$encoding ? iconv($source_encoding, $encoding, $source) : $source);
if(preg_match('/[\r\n"'.preg_quote($sep, '/').']/', $str)){
return '"'.str_replace('"', '""', $str).'"';
} else
return $str;
}
Così utilizzo può essere simile a questo:
while($row = mysql_fetch_assoc($res)){
foreach($row as $val){
$csv .= escapeStringCSV($val).';';
}
$csv .= "\r\n";
}
fonte
2016-02-26 09:48:12