使用php将mysqli数据导出到excel时,所有字段都显示在一列中

使用php将mysqli数据导出到excel时,所有字段都显示在一列中,php,excel,mysqli,Php,Excel,Mysqli,我为下载excel文件编写了一个简单的php脚本,其中包含一些通过MySQLI查询获取的MySQLI数据,当我使用英语数据时,它工作正常,但当我使用utf 8语言(如阿拉伯语)时,它在excel文件的一列中显示所有数据 这是代码,任何帮助都将不胜感激 <?php $conn = new mysqli('localhost', 'root', ''); mysqli_select_db($conn, 'test_db'); mysqli_query($conn, "set names 'ut

我为下载excel文件编写了一个简单的php脚本,其中包含一些通过MySQLI查询获取的MySQLI数据,当我使用英语数据时,它工作正常,但当我使用utf 8语言(如阿拉伯语)时,它在excel文件的一列中显示所有数据

这是代码,任何帮助都将不胜感激

<?php
$conn = new mysqli('localhost', 'root', '');
mysqli_select_db($conn, 'test_db');
mysqli_query($conn, "set names 'utf8'");
setlocale(LC_ALL, 'en_US.UTF-8');

$sql = "SELECT `user_name`,`user_q1`,`user_q2`,
                `user_q3`,`user_q4`,`user_q5` 
        FROM    `usertable`";

$setRec = mysqli_query($conn, $sql);

$columnHeader = '';
$columnHeader = "الاسم" . "\t" . "الاجابة 1" . "\t" . "الاجابة 2" . "\t". "الاجابة 3" . "\t". "الاجابة 4" . "\t". "الاجابة 5" . "\t";

$setData = '';
while ($rec = mysqli_fetch_row($setRec)) {
    $rowData = '';
    foreach ($rec as $value) {
        $value = '"' . $value . '"' . "\t";
        $rowData .= $value;
    }
    $setData .= trim($rowData) . "\n";
}

header("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=User_Detail.csv");
header("Pragma: no-cache");
header("Expires: 0");
echo ucwords($columnHeader) . "\n" . $setData . "\n";
?>

改用。为什么要使用
$value
进行格式化,然后将值附加到
$rowData
?这只是浪费资源。一些合理的代码缩进将是一个好主意。它帮助我们阅读代码,更重要的是,它将帮助您为自己的利益调试代码。您可能会被要求在几周/几个月内修改此代码,最终您将感谢我。