MySQLでは、データフィールドタイプを_utf8_bin
_に設定し、Unicodeでデータを保存しています。 Webページにテキストが正しく表示されています。
テーブルからデータをエクスポートするExcelファイルを生成したい。 _.xls
_および_.cvs
_の出力は-'????'です。
私はここで他の答えをチェックアウトします、それはヘッダーを使用するように呼ばれています:
header("content-type:application/csv;charset=UTF-8");
同様の質問 。しかし、機能していません。ヘッダーを使用した後、csvの出力は-सà¥、रà¥à¤¯à྾です。
助けてください。ありがとう。
この投稿は私の問題を解決しました: https://stackoverflow.com/a/4762708/2349494
そして、これが変換を行ったものです:
print chr(255) . chr(254) . mb_convert_encoding($csv_output, 'UTF-16LE', 'UTF-8');
以前は、正しいデータがエクスポートされるようになり、文字化けが発生していました。
私は同じ問題を抱えていて、2つのことを組み合わせてそれを行いました。
まず、テーブルの照合順序をUTF8に変更する必要があります(例: "utf8_general_ci")(または単に確認してください)。次に、MySQLクエリの後にこのコードを追加します。
mysql_query("SET NAMES utf8");
お気に入り
$result = mysql_query("SHOW COLUMNS FROM table WHERE Field NOT IN ('user_id', 'password')");
mysql_query("SET NAMES utf8");
そして、これをヘッダーとして使用します(ニーズに合わせて調整します):
header('Content-Description: File Transfer');
header("Content-type: application/vnd.ms-Excel");
header("Content-disposition: csv" . date("Y-m-d") . ".csv");
header("Content-disposition: filename=".$filename.".csv");
header('Content-Transfer-Encoding: binary');
header('Pragma: public');
print "\xEF\xBB\xBF"; // UTF-8 BOM
print $csv_output;
exit;
私はSajal応答のバリアントを持っていますが、php.netでそれを見つけました: http://www.php.net/manual/en/function.iconv.php#104287
Csvのコンテンツの冒頭でこれをエコーします。
_chr(255).chr(254).iconv("UTF-8", "UTF-16LE//IGNORE", $data)
_
私はiconv()
を好みますが、mb_convert_encoding()
と同じように見えます。 _;
_をタブ(_\t
_)に置き換えることを忘れずに、このようにうまくいきました!
次のコードを試してください。
ob_end_clean();
$_filename = date('Y_m_d_H_i').".csv";
header("Cache-Control: public");
header("Content-Type: application/octet-stream");
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=$_filename");
// Read the file from disk
readfile($filename);
exit();
ユニコードをサポートするXLS(xml形式)としてエクスポートし、テスト済みで100%動作する