0

私はphpでcsvを次のようにエクスポートします:

$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);

csvを開くとフォントUTF_8がエラーになります。例: 防本部コー show in file csv: æ¶ˆé˜²æœ¬éƒ¨ă‚³ăƒ¼ăƒ‰</p>

いかがなさいましたか?ありがとう

4

3 に答える 3

1

これはここで議論されています:

Excelが正しく読み取るUTF-8 CSVをPHPで出力するにはどうすればよいですか?

別のテキスト エディターで CSV をチェックして、エディターを除外することもできます。

于 2012-09-21T09:31:12.003 に答える
1

$fpファイルへのポインタ リソースです。これは文字列ではありません。これを行うことはできません。

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

UTF-16 データをファイルに書き込むには、書き込み後ではなく、書き込み前に変換する必要があります。

$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);

これが実際に必要なデータを出力するかどうかはわかりませんが、明らかなエラーは修正されます。

于 2012-09-21T09:34:14.930 に答える
0

この機能を試してみてください:

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();
    }
于 2014-01-20T06:41:41.040 に答える