PHP电子表格和JS:如何支持阿拉伯语?

PHPspreadsheet and JS: How to support arabic?

我正在从数据库中获取数据,有些字符串是英文的,有些是阿拉伯文的,有些是半阿拉伯半英文的。

我正在生成这样的电子表格.xlsx

function writeToFile($spreadsheet, $filename)
{
    header("Content-Encoding: UTF-8");
    header('Content-Type: application/vnd.ms-excel; charset=UTF-8"');
    header('Content-Disposition: attachment; filename=' . $filename);
    $writer = new Xlsx($spreadsheet);

    $writer->save("php://output");
}

但我没有直接下载它,这会生成一个使用 javascript 下载的 blob。

fetch(url)
    .then(resp => resp.blob())
    .then(file => {
        if (file.size > 0) {
            const url = window.URL.createObjectURL(file);
            const a = document.createElement('a');
            a.style.display = 'none';
            a.href = url;
            a.download = filename;
            document.body.appendChild(a);
            a.click();
            window.URL.revokeObjectURL(url);
        } else {
             console.log('error');
        }
    })
    .catch(() => console.log('error'));

问题出在 PHPspreadsheet 上,我不知道我是否解决了这个问题,我会遇到另一个与 JS 相关的问题,但我知道如果我不使用 JS 生成文件,我仍然会有阿拉伯问题。

根据this answer,结果我需要添加

array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'")

到PDO连接,所以变成这样

 try {
        $db = new PDO("mysql:host=$server;dbname=$database", $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
        // set the PDO error mode to exception
        $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    } catch (PDOException $e) {
        echo "Connection failed: " . $e->getMessage();
    }
    return $db;
}