php导出mysql中文字符到csv,但字符变成了垃圾代码

时间:2016-04-04 07:05:38

标签: php mysql csv export

我正在尝试将数据从mysql导出到包含一些中文字符的csv,但它总是变成垃圾代码。我用谷歌搜索并找到在标题处添加BOM的建议。但它似乎仍然不起作用,这是我的代码。请建议。

<?php
if(isset($_POST["Export"]))
{   
mysql_connect('localhost','test','abc');
mysql_select_db('test');

header('Content-Encoding: UTF-8');
header('Content-Type: text/csv; charset=utf-8' );
header(sprintf( 'Content-Disposition: attachment; filename=my-csv-%s.csv', date( 'dmY-His' ) ) );
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');

$data = fopen( 'php://output', 'w' );

//This line is important:
fputs( $data, "\xEF\xBB\xBF");

fputcsv($data,array('student_id','student_chiName','student_engName','    student_title','student_gender','news_receive'));


//Retrieve the data from database
$rows = mysql_query('SELECT * FROM student');

//Loop through the data to store them inside CSV
while($row = mysql_fetch_assoc($rows)){
fputcsv($data, $row);

}
}

?>

这是我的Hex视图,看起来中文字符只有一个字节,缺少一个字节。似乎PHP没有输出4个字节的字符。    The hex dump of output file by PHP

1 个答案:

答案 0 :(得分:0)

试试这个:

$data = fopen($filepath, 'w');
$rows = mysql_query('SELECT * FROM student');

fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));
while($row = mysql_fetch_assoc($rows)){
    fputcsv($data, $row);
}

fprintf($df, chr(0xEF).chr(0xBB).chr(0xBF));写入文件头以进行正确编码。