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;
}
我正在从数据库中获取数据,有些字符串是英文的,有些是阿拉伯文的,有些是半阿拉伯半英文的。
我正在生成这样的电子表格.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;
}