PHPvelopsheet и JS: как поддерживать арабский c? - PullRequest
0 голосов
/ 20 января 2020

Я получаю данные из базы данных, некоторые строки - Engli sh, некоторые - арабский c, некоторые - наполовину арабский c, наполовину английский - sh.

Я генерирую электронная таблица .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.

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'));

Проблема в том, что PHPvelopsheet, я не знаю, если я это исправлю, у меня будет другая проблема, связанная с JS, но я знаю, что если я сгенерирую файл без использования JS, у меня все равно будет араби c вопрос.

1 Ответ

0 голосов
/ 21 января 2020

За этот ответ , оказывается, мне нужно добавить

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...