我有一个将数据存储到mysql的html表单。当使用特殊字符(øæå)时,它将字符正确存储在数据库中。
当我使用脚本将 mysql 表保存到 CSV 文件时,CSV 文件将不再正确显示特殊字符。
有什么想法吗?
$conn = mysqli_connect($hostname, $user, $password, $database, $port);
if (mysqli_connect_errno()) {
die("Failed to connect to MySQL: " . mysqli_connect_error());
}
$csv_export = '';
$query = mysqli_query($conn, "SELECT * FROM ".$db_record);
$field = mysqli_field_count($conn);
for($i = 0; $i < $field; $i++) {
$csv_export.= mysqli_fetch_field_direct($query, $i)->name.';';
}
$csv_export.= '
';
while($row = mysqli_fetch_array($query)) {
for($i = 0; $i < $field; $i++) {
$csv_export.= '"'.$row[mysqli_fetch_field_direct($query, $i)->name].'";';
}
$csv_export.= '
';
}
header("Content-type: text/x-csv");
header("Content-Disposition: attachment; filename=".$csv_filename."");
echo($csv_export);
最佳答案
我假设您将 mysql 保存到 CSV 的脚本是在 Linux shell 或 Windows 命令提示符下运行的。问题可能是存储到数据库的数据使用与脚本使用的环境不同的字符集。
检查数据以哪种格式存储到数据库或将其更改为UTF-8:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8;
并确保您的脚本环境使用相同的字符集。在 Ubuntu linux 上,将以下几行添加到文件 /etc/environment 中可能会解决问题(da_DK 用于丹麦,只是根据你的角色进行猜测,你需要将其设置为你的角色使用的一个):
LC_ALL=da_DK.UTF-8
LANG=da_DK.UTF-8
关于PHP7,将 mySQL 导出到 CSV 不正确显示特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50239262/