Кодировка специальных символов CSV windows excel

#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'",
   ]);