Nel frattempo in cui tu scrivevi ho fatto un test, vedi se ti può tornare utile, a me funziona perfettamente con openoffice:

Codice PHP:
<?php
$records 
= array();

$record = array();

$record[] = "Test'";
$record[] = "Prova";
$record[] = "Gianiaz";

$records[] = $record;

$record = array();
$record[] = "Test2'";
$record[] = "Prova2";
$record[] = "Thitan";

$records[] = $record;

$delimitatore_testo "'";
$delimitatore_campo ";";
$delimitatore_riga "\n";
$filename 'test.csv';
$csv "";
foreach(
$records as $record) {

  
$riga "";

  foreach(
$record as $valore) {
    if(
$riga) {
      
$riga .= $delimitatore_campo;
    }
    
$riga .= $delimitatore_testo.str_replace($delimitatore_testo$delimitatore_testo.$delimitatore_testo$valore).$delimitatore_testo;
  }

  
$riga .= $delimitatore_riga;

  
$csv .= $riga;

}

$handle fopen($filename'w');
fwrite($handle$csv);
fclose($handle);


?>