PHP7,将 mySQL 导出到 CSV 不正确显示特殊字符

标签 php mysql csv utf-8

我有一个将数据存储到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/

相关文章:

PowerShell - 转置哈希表的结果

php - 从mysql中的多个表中删除

php - 如何获取 yii2 select2 小部件所选选项的值

php - 有语法错误但不知道在哪里

php - Laravel DB::raw 返回 - SQLSTATE[42000]:语法错误或访问冲突

python - 使用 Python 将 CSV 转换为 mongoimport 友好的 JSON

php - Wordpress 中多个作者的 Facebook Open-graph 标签

php - 插入查询到MYSQL数据库

mysql - 从特定单元格获取总和的 SQL 选择

ruby - 如何修复 nokogiri (yahoo) 桌面刮刀?