在MySQL中,我将数据字段类型设置为utf8_bin
,我将数据存储在Unicode中。文本正在网页中正确显示。
我想生成excel文件,将数据从我的表导出到它。 .xls
和.cvs
中的输出为 - '????'。
我在这里查看了其他答案,它被称为使用标题:
header("content-type:application/csv;charset=UTF-8");
similar question。但它不起作用。使用标题后,在csv中输出是 - सà¥,रà¥à¤¯à¤¾。
请帮忙。谢谢。
答案 0 :(得分:18)
这篇文章解决了我的问题:https://stackoverflow.com/a/4762708/2349494
这就是转换的原因:
print chr(255) . chr(254) . mb_convert_encoding($csv_output, 'UTF-16LE', 'UTF-8');
早些时候,我正在获取垃圾字符,现在正确导出数据。
答案 1 :(得分:11)
我遇到了同样的问题,我通过组合两件事来做到这一点:
首先,您必须将表格排序更改为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;
答案 2 :(得分:5)
我有一个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
,这对我来说很合适!
答案 3 :(得分:0)
尝试以下代码;
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();
答案 4 :(得分:0)
将其导出为XLS(xml格式),支持unicode,只需测试并正常工作