$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Er du sikker på, at du vil have BE? Det er en temmelig sjældent brugt kodning. Windows "Unicode" er UTF-16LE.)
Jeg ville undgå at bruge "auto"
som fra_encoding. Det er en upålidelig bodge, der ofte vil give de forkerte resultater, især på korte strenge. Da input tilsyneladende er UTF-8, bør du angive det eksplicit i stedet.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Desværre fputcsv
kan ikke skrive til en UTF-16-kodet fil. Den bruger enkeltbyte ASCII-kommaer/anførselstegn/nylinjer, så den virker kun for kodninger, der er ASCII-supersæt. Så hvis du ville bruge det, skulle du skrive hele filen som UTF-8 og derefter omkode hele filen til UTF-16.
Du vil måske overveje en anden (eller din egen) CSV-skribent i stedet for; ud over at være irriterende at bruge til ikke-ASCII-kodninger, fputcsv
overholder heller ikke RFC-standarden for CSV-filer, så du kan nemt generere filer, som de fleste CSV-forbrugende software ikke kan indlæse korrekt.
PHPs indbyggede CSV-funktioner er i bund og grund et komplet spild af alles tid.