我正在尝试使用PHP将表格从MySQL数据库导出到excel文件它正常工作但是阿拉伯语言字显示为我在互联网上尝试过的奇怪字母但没有任何效果你可以看到我的代码并告诉我我能做什么pleeeeeeeeease我正在研究它3天了:( 非常感谢。
结果:
代码: `
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'charity';
$pdo = new PDO("mysql:host=$host;dbname=$database", $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
$pdo->exec("SET CHARACTER SET utf8");
$sql = "SELECT * FROM files";
$statement = $pdo->prepare($sql);
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$columnNames = array();
if (!empty($rows)) {
$firstRow = $rows[0];
foreach ($firstRow as $colName => $val) {
$columnNames[] = $colName;
}
}
$fileName = 'files.csv';
header('Content-Type: application/excel;charset=utf-8');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
ob_end_clean();
$fp = fopen('php://output', 'w');
fputcsv($fp, array_values($columnNames), ';', ' ');
foreach ($rows as $row) {
$outp = fputcsv($fp, array_values($row), ';', ' ');
}
fclose($fp);
flush();
exit;
答案 0 :(得分:0)
要更改编码,请使用mb_convert_encoding
功能
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'charity';
$pdo = new PDO("mysql:host=$host;dbname=$database", $user, $password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
$pdo->exec("SET CHARACTER SET utf8");
$sql = "SELECT * FROM files";
$statement = $pdo->prepare($sql);
$statement->execute();
$rows = $statement->fetchAll(PDO::FETCH_ASSOC);
$columnNames = array();
if (!empty($rows)) {
$firstRow = $rows[0];
foreach ($firstRow as $colName => $val) {
$columnNames[] = mb_convert_encoding($colName, "Windows-1251", "UTF-8");
}
}
$fileName = 'files.csv';
header('Content-Type: application/excel;charset=utf-8');
header('Content-Disposition: attachment; filename="' . $fileName . '"');
ob_end_clean();
$fp = fopen('php://output', 'w');
fputcsv($fp, array_values($columnNames), ';', ' ');
foreach ($rows as $row) {
for ($i = 0; $i < count($row); $i++) {
$row[$i] = mb_convert_encoding($row[$i], "Windows-1251", "UTF-8");
}
$outp = fputcsv($fp, array_values($row), ';', ' ');
}
fclose($fp);
flush();
exit;