【问题标题】:php csv show question marksphp csv显示问号
【发布时间】:2015-05-21 04:31:41
【问题描述】:

我正在尝试导出 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");
}

?>

请帮忙谢谢。

【问题讨论】:

  • 你是如何打开文件的?可能您使用的程序不理解 UTF-8 文本,所以它显示 ? 代替某些字符
  • 在打开的 CSV 文件中单击列或增加列宽。
  • @SumanSingh 你的解决方案会发生什么?
  • 很多时候 CSV 显示 '???'类似于日期字段,但是当我们单击列时,它将显示当前格式化的数据。

标签: php mysql csv utf-8


【解决方案1】:

我没有看到对 mysql_set_charset 函数的调用。

mysql_set_charset('utf8');

这种遗漏是疏忽吗?还是故意省略了,因为它已经被确认客户端字符集没有被正确设置?


当mysqli 和PDO 接口都可用时,为什么我们要编写使用已弃用 mysql_ 函数的代码?为什么我们要通过将潜在的不安全值合并到 SQL 文本中来编写易受 SQL 注入攻击的代码?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 2012-04-09
    • 2017-04-23
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    相关资源
    最近更新 更多