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

Saj*_*jal 9 php csv unicode excel

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

我想生成excel文件从我的表导出数据到它.输出in .xls.cvs- '????'.

我在这里查看了其他答案,它被引用到使用标题:

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

类似的问题.但它不起作用.使用标题后,在csv中输出是 - सà¥,रà¥à¤¯à¤¾.

请帮忙.谢谢.

Saj*_*jal 19

这篇文章解决了我的问题:https://stackoverflow.com/a/4762708/2349494

这就是转换的原因:

print chr(255) . chr(254) . mb_convert_encoding($csv_output, 'UTF-16LE', 'UTF-8');
Run Code Online (Sandbox Code Playgroud)

早些时候,我正在获取垃圾字符,现在输出正确的数据.


小智 12

我有同样的问题,我通过结合两件事做到了:

首先,您必须将表格排序更改为UTF8,例如:"utf8_general_ci"(或只是确保这一点),然后在MySQL查询后添加此代码:

mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)

喜欢

$result = mysql_query("SHOW COLUMNS FROM table WHERE Field NOT IN ('user_id', 'password')");
mysql_query("SET NAMES utf8");
Run Code Online (Sandbox Code Playgroud)

然后,将其用作标题(根据您的需要进行调整):

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;
Run Code Online (Sandbox Code Playgroud)


小智 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)
Run Code Online (Sandbox Code Playgroud)

我更喜欢,iconv()但它似乎也一样mb_convert_encoding().不要忘记;用tabs(\t)替换它,这对我来说很好!