PHP 在 .csv 中为 Excel 编码变音符号和空格

PHP encoding Umlauts and Spaces in .csv for Excel

我有一些 json 数据需要以 .csv 文件的形式通过电子邮件发送给我的用户。

下面的代码在 Hällowörld 中按预期工作,但是,一旦我将 space 放在那里,Hällo wörld,.csv 文件在打开时读取 ÔªøH√§llo w√∂rld在 Excel(对于 Mac)。

$temp = fopen('php://temp/maxmemory:10485760', 'w');
$rows = json_decode('[["Hällowörld"]]'); // -> Hällowörld
//$rows = json_decode('[["Hällo wörld"]]'); // -> ÔªøH√§llo w√∂rld
foreach($rows as $row) {
  $row = array_map(function($cell) {
    return chr(239).chr(187).chr(191).$cell;
  }, $row);
  fputcsv($temp, $row, ';');
}
rewind($temp);
$csv = stream_get_contents($temp);
fclose($temp);
$csv = base64_encode($csv);
// -> post $csv to my email provider's API

一些注意事项:

我找到了解决办法! :) 将上面的 foreach 循环替换为以下内容:

array_unshift($rows, [chr(239).chr(187).chr(191)]);
foreach($rows as $row) {
  fputcsv($f, $row, ',');
}