web-dev-qa-db-ja.com

PHP UTF 8文字のデータがある場合にCSVをエクスポート

MySQLでは、データフィールドタイプを_utf8_bin_に設定し、Unicodeでデータを保存しています。 Webページにテキストが正しく表示されています。

テーブルからデータをエクスポートするExcelファイルを生成したい。 _.xls_および_.cvs_の出力は-'????'です。

私はここで他の答えをチェックアウトします、それはヘッダーを使用するように呼ばれています:

header("content-type:application/csv;charset=UTF-8");

同様の質問 。しかし、機能していません。ヘッダーを使用した後、csvの出力は-सà¥、रà¥à¤¯à྾です。

助けてください。ありがとう。

9
Sajal

この投稿は私の問題を解決しました: https://stackoverflow.com/a/4762708/2349494

そして、これが変換を行ったものです:

print chr(255) . chr(254) . mb_convert_encoding($csv_output, 'UTF-16LE', 'UTF-8');

以前は、正しいデータがエクスポートされるようになり、文字化けが発生していました。

19
Sajal

私は同じ問題を抱えていて、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;
12
Poorya

私は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_)に置き換えることを忘れずに、このようにうまくいきました!

5
ldaguise

次のコードを試してください。

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();
0
Ashwin Parmar

ユニコードをサポートするXLS(xml形式)としてエクスポートし、テスト済みで100%動作する

https://code.google.com/p/php-Excel/

0
Zakari