Как я могу экспортировать файл .csv, используя японский символьный код в PHP? - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь создать CSV-файл, используя laravel и php.База данных, используемая для создания CSV, содержит японские символы, которые я хочу, чтобы в файле было точно такое же.

Ниже приведен код, который я пробовал до сих пор, но японские символы по-прежнему отображаются в виде символов.

$headers = array(
    "Content-Encoding" => "sjis-win",
    "Content-type" => "text/csv; charset=sjis-win",
    "Content-Disposition" => "attachment; filename=User-List.csv",
    "Pragma" => "no-cache",
    "Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
    "Expires" => "0"
);


$users= $this->users->orderBy('created_at', 'desc')->get();
$columns = array('氏名', '氏名(ローマ字)');

$callback = function() use ($users, $columns)
{
    $file = fopen('php://output', 'w');
    fputcsv($file, $columns);

    foreach($users as $user) {
        fputcsv($file, array($user->name, $user->name_alphabet));
    }
    fclose($file);
};

Чего мне не хватает?Что необходимо изменить, чтобы символы автоматически отображались как японские в csv.

1 Ответ

1 голос
/ 17 мая 2019

Поскольку данные, которые вы извлекаете из базы данных, кодируются в UTF-8 , вам необходимо будет перекодировать эти данные в соответствии с кодировкой вашего CSV-файла (SJIS-win).

Вы можете использовать функцию php mb_convert_encoding () для достижения этой цели.

mb_convert_encoding($dataVariable, "SJIS-win", "UTF-8");

В вашем случае вы бы использовали его следующим образом:

foreach($users as $user) {
    fputcsv($file, array(
        mb_convert_encoding($user->name, "SJIS-win", "UTF-8"), 
        mb_convert_encoding($user->name_alphabet, "SJIS-win", "UTF-8")
    ));
}

Вам также может понадобиться перекодировать строки в вашем массиве $columns = array('氏名', '氏名(ローマ字)').

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...