2012-09-21 4 views
0

j'exporter csv en php comme:Comment corriger UTF8 de la police d'erreur dans le fichier csv lorsque le fichier d'exportation csv en php

$fp = fopen($filename, 'w'); 

      foreach ($list as $fields) { 
       if(!empty($fields)) 
       fputcsv($fp, $fields); 
       else 
       fputcsv($fp, ' '); 

      } 
      $fp = chr(255).chr(254).mb_convert_encoding($fp,"UTF-16LE","UTF-8"); 
      fclose($fp); 

Quand j'ouvre csv, la police est UTF_8 erreur. Ex: 防 本部 コ ー Afficher dans le fichier csv: æ¶é~²æœ¬éƒ¨ă,³ăƒ¼ăƒ ‰

Puis-je vous aider? Merci

Répondre

1

$fp est une ressource pointeur vers un fichier. Il n'est pas une chaîne, vous ne pouvez pas le faire:

$fp = chr(255).chr(254).mb_convert_encoding($fp,"UTF-16LE","UTF-8"); 

Pour écrire des données UTF-16 au fichier, vous devez le convertir avant de l'écrire, et non après le fait:

$fp = fopen($filename, 'w'); 

fwrite($fp, chr(255).chr(254)); 

foreach ($list as $fields) { 
    foreach ($fields as &$field) { 
     $field = mb_convert_encoding($field, 'UTF-16LE', 'UTF-8'); 
    } 
    fputcsv($fp, $fields); 
} 

fclose($fp); 

Don Je ne sais pas si cela produit réellement les données dont vous avez besoin, mais cela corrige l'erreur évidente.

+0

Il est encore erreur. – mum

0

Essayez cette fonction fonctionnera:

public static function exportCSVFile($data = array(), $headers = array(), $delimiter = ",", $csvfilename = "CSVFile") { 
     ob_clean(); 
     ob_start(); 
     $csvfilename = $csvfilename . "_" . date("Y_m_d_h_i_s") . ".csv"; 
     $file_handler = fopen("php://output", 'w'); 
     header("Pragma: public"); 
     header("Expires: 0"); 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header("Content-Type: application/csv"); 
     //header("Content-Type: application/csv;charset=utf-8"); 
     header("Content-Disposition: attachment;filename={$csvfilename}"); 
     header("Content-Transfer-Encoding: binary"); 
     foreach ($data as $fields) { 
      $_str = implode($delimiter, $fields); 
      $fields = explode($delimiter, utf8_decode($_str)); 
      fputcsv($file_handler, $fields, $delimiter, $enclosure = '"'); 
     } 
     fclose($file_handler); 
     ob_flush(); 
     exit(); 
    }