#php #laravel #csv #encoding #special-characters
#php #laravel #csv #кодирование #специальные символы
Вопрос:
У меня возникли проблемы с отображением специальных символов символов в файле CSV. Он отлично работает, за исключением Windows Excel. Я попытался добавить кодировку Windows-1252, которая, как я полагаю, должна корректно отображать специальный символ, однако это не так. Кто-нибудь может сказать мне, чего мне не хватает? Мой код:
$file = tempnam(sys_get_temp_dir(), 'mycsv');
$fh = fopen($file, 'w');
$currencyOption = $account->team->user->getOption('accounting', 'currency');
$currency = config('currencies.'.$currencyOption);
if($currency)
{
$symbol = '€';//$currency['format'];
$symbol = str_replace('%s ', '', $symbol);
$symbol = str_replace(' %s', '', $symbol);
$encoding = mb_detect_encoding($symbol);
$symbol = iconv($encoding, "Windows-1252", $symbol);
}
$groups = [];
foreach($account->fees as $fee)
{
if(!isset($groups[$fee->group]))
{
$groups[$fee->group] = $fee->name . " ($symbol)";
}
}
fputcsv($fh, array_merge([___('Player')], $groups, [___('Total') . " ($symbol)"]));
foreach($account->players as $player) {
$row = [$player->name];
foreach($groups as $groupId => $groupName)
{
$val = $account->fees->where('player_id', $player->id)->where('group', $groupId)->first();
$row[] = $val ? $val->value : '0';
}
$row[] = $player->credit;
fputcsv($fh, $row);
}
$row = [''];
foreach($groups as $groupId => $groupName)
{
$row[] = '';
}
$row[] = $account->balance;
fputcsv($fh, $row);
fclose($fh);
return response()->download($file, 'account.csv', [
'Content-Encoding' => 'Windows-1252',
'Content-Type' => 'text/csv; charset=Windows-1252',
'Content-Disposition' => "attachment; filename='account.csv'",
]);