1

我正在一个 PHP 站点上工作,我必须从 mysql 数据库中导出所有用户。一切正常,但是当我打开导出的 csv 文件时,手机号码和日期没有以正确的格式显示,即手机号码显示为十六进制,日期显示为 #####。我想以正确的格式显示数据格式有什么帮助吗?提前致谢

4

3 回答 3

2

它实际上不是那个标志,点击它会显示你的价值。CSV 只是将其显示为预览。

于 2013-08-21T07:18:18.003 回答
1

您对 CSV 格式有很高的期望。它只是分为列的纯文本,因为您可以自己检查是否只是在文本编辑器中打开生成的文件(而不是双击它并由默认程序加载它)。其内容的解释基本上留给客户端电子表格软件,您显然使用的是最不可用的:Microsoft Excel。

双击文件时,Excel 不会提示任何选项。它对所有内容都使用默认选项,并且大多数默认选项选择不当:

  • 文件编码为电脑默认编码:Win-1252、EUC-JP...

  • 列分隔符是计算机的默认列表分隔符:,在美国,;在一些欧洲国家...

  • 日期必须采用计算机的默认日期格式:美国的 MM/DD/YYYY,其他几乎所有地方的 DD/MM/YYYY。

  • 前导零被丢弃。

如果您在例如 LibreOffice Calc 中加载文件,您会看到一个对话框,您可以在其中确保正确加载数据(但是,这仍然是您每次都需要执行的手动任务)。

总结一下:如果您无法控制如何处理 CSV,那么 CSV 是一种糟糕的格式(但它很受欢迎,因为它很容易生成)。

至于你的确切问题:

手机号码显示为十六进制

我怀疑你的意思是:

6.00912E+15

这不是十六进制,它是您在学校学习的科学记数法 (6.00912 × 10 15 ),因为它通常在计算机中表示。这就是 Excel 显示大数的方式;因为,是的,Excel 将坚持将电话作为数字处理(事实并非如此)。如果单击单元格,您将在顶部栏中看到完整的值。

请注意,以电话号码开头的电话号码(例如格式0中的国际号码)将无法在 Excel 中正确加载。00<country code>它将删除前导零并将单元格格式更改为“文本”不会让它们恢复原状。

日期显示为#####。

这就是 Excel 表示列太窄而无法显示值的方式。只需拖动列标题之间的小分隔符。

于 2013-08-21T07:18:27.473 回答
0
<?php
session_start();
$csv_output = '';
$query_result=mysql_query("select * from tablename");
//add your table field name and proceed forther
while($result=mysql_fetch_array($query_result)){
  $csv_output.=",".$result['fildname']." ";
  }
   //$csv_output.="\n";


 header("Content-type: application/octet-stream");
 header("Content-Disposition: attachment; filename=csvfile.csv");
 header("Pragma: no-cache");
 header("Expires: 0");
 print $csv_output;
 exit;
?>

我试试这个希望你能用这个东西

于 2013-08-21T06:53:48.207 回答