从mysql数据库导出到excel文件

时间:2018-01-11 08:47:50

标签: php excel csv export-to-csv xlsx

我正在尝试使用PHP将表格从MySQL数据库导出到excel文件它正常工作但是阿拉伯语言字显示为我在互联网上尝试过的奇怪字母但没有任何效果你可以看到我的代码并告诉我我能做什么pleeeeeeeeease我正在研究它3天了:( 非常感谢。

结果:

https://i.stack.imgur.com/i5ZDl.png

代码: `

$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;

1 个答案:

答案 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;