当数据具有UTF8字符时,PHP导出CSV


PHP export CSV when data having UTF8 charcters

在MySQL中,我已将数据字段类型设置为utf8_bin,并以Unicode存储数据。文本正在网页中正确显示。

我想生成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');

早些时候我得到垃圾字符,现在正确的数据被导出。

我遇到了同样的问题,我通过结合两件事来解决:

首先,您必须将表排序规则更改为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();