MySQL到Excel字符集问题

我有一个数据库设置,接受用户注册和他们的详细信息等。我正在寻找出口数据库使用PHP的Excel文件。

我遇到的问题是,一些参赛者已经input了诸如土耳其语之类的外国字符,这些字符已经被错误地写入了数据库 – 就我所知,字符集可能在第一次被错误地设置时制作。

我已经使我的代码导出数据库到Excel(下面),但我不能让Excel文档正确显示,无论我如何尝试编码数据

<?php require_once('../php/db.php'); header("Content-type: application/octet-stream"); header("Content-Disposition: attachment; filename=Download.xls"); header("Pragma: no-cache"); header("Expires: 0"); $query = "SELECT * FROM users"; $result = mysqli_query($link, $query); if($result) { $count = mysqli_num_rows($result); for($i=0; $i<$count; $i++) { $field = mysqli_fetch_field($result); $header .= $field->name."\t"; while($row = mysqli_fetch_row($result)) { $line = ''; foreach($row as $value) { if((!isset($value)) OR ($value == "")) { $value = "\t"; } else { $value = str_replace('"', '""', $value); $value = '"'.$value.'"'."\t"; } $line .= $value; } $data .= trim($line)."\n"; } $data = str_replace("\r", "", $data); if($data == "") { $data = "\n(0) Records Found!\n"; } } print mb_convert_encoding("$header\n$data", 'UTF-16LE', 'UTF-8'); } else die(mysqli_error()); ?> 

当我这样做的时候出现一个错误,当它打开它说Excel不识别文件types时,它打开文件,但它围绕所有土耳其字符试图写入其绘制的框。

我不是PHP的专家,这只是我拼凑在一起的信息。

任何人都可以帮我一把吗?

非常感激

莫兹

  1. 首先,您似乎在创build制表符分隔的文本文件,然后使用MIMEtypes的application/octet-stream和文件扩展名.xls将其返回给浏览器。 Excel可能会出现这是制表符分隔(但它听起来像你的错误,好像它没有),但在任何情况下,你真的应该使用text/tab-separated-values MIMEtypes和.txt文件扩展名,以便一切都知道究竟是什么数据。

  2. 其次,要创build制表符分隔的文件,你会非常明智地直接从MySQL导出数据(使用SELECT ... INTO OUTFILE ),因为所有的痛苦都可能由于逃避分隔符而产生你自己。 例如:

     SELECT * FROM users INTO OUFILE '/tmp/users.txt' FIELDS TERMINATED BY '\t' 

    那么你只需要使用readfile()将该文件的内容读取到浏览器。

    如果您绝对必须在PHP中创build分隔文件,请考虑使用它的fputscsv()函数(您仍然可以指定您希望使用制表符分隔符)。

  3. 即使您的文件以逗号分隔 ,总是使用.txt文件扩展名而不是.csv因为某些版本的Excel假定扩展名为.csv 所有文件都使用Windows-1252编码。

  4. 就字符编码而言,您需要检查数据库的内容以确定数据是否正确存储:最好的方法是使用SELECT HEX(column) ...以便您可以检查底层字节。 一旦确定,您可以UPDATElogging是否需要转换。