php csv显示问号

时间:2015-05-21 04:31:42

标签: php mysql csv utf-8

我正在尝试导出CSV文件,这在导出时效果很好。但是当我打开我的csv文件时会出现一些问题,有一些文本更改为" ??????"。但在phpmyadmin中,一切都很好。该文本由utf-8编码。

这是我的代码

<?php
$day = $_POST['day'];

$starttime = "'".$day.' 00:00:00'."'";
$stoptime = "'".$day.' 23:59:59'."'";

$uname = "*********";
$pass = "*********";
$host = "*********"; 
$database = "*********"; 

$connection=mysql_connect($host,$uname,$pass); 

echo mysql_error();
$selectdb=mysql_select_db($database) or die("Database could not be selected");  
$result=mysql_select_db($database)or die("database cannot be selected <br>");

$output = "";
$table = "***********";
$sql = mysql_query("SELECT * FROM $table WHERE applytime BETWEEN $starttime AND $stoptime");
$columns_total  = mysql_num_fields($sql);
$rowcount = mysql_num_rows($sql);

if($rowcount >= 1)
{
for ($i = 0; $i < $columns_total; $i++) {
    $heading =  mysql_field_name($sql, $i);
    $output = '"'.$heading.'",';
}
$output .="\n";

while ($row = mysql_fetch_array($sql)) {
for ($i = 0; $i < $columns_total; $i++) {
$output .='"'.$row["$i"].'",';
}
$output .="\n";
}

$filename =  "myFile.csv";

header("content-type:application/csv;charset=UTF-8");
header('Content-Disposition: attachment; filename='.$filename);

echo $output;
exit;
}

else
{
    echo("There is no record Today");
}

?>

请帮助谢谢。

1 个答案:

答案 0 :(得分:1)

我没有看到对mysql_set_charset功能的调用。

mysql_set_charset('utf8');

这种疏忽是疏忽吗?或者是故意省略的,因为已经确认客户端字符集没有设置得恰当?

mysql_mysqli接口都可用时,为什么要编写使用不推荐的 PDO函数的代码?为什么我们通过将可能不安全的值合并到SQL文本中来编写易受SQL注入攻击的代码?