$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Jste si jisti, že chcete BE? Je to velmi zřídka používané kódování. Windows „Unicode“ je UTF-16LE.)
Vyhnul bych se použití "auto"
jako kódování from_encoding. Je to nespolehlivý bodge, který často způsobí špatné výsledky, zejména na krátkých strunách. Protože vstup je zjevně UTF-8, měli byste to místo toho uvést explicitně.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Bohužel fputcsv
nelze zapisovat do souboru s kódováním UTF-16. Používá jednobajtové ASCII čárky/uvozovky/nové řádky, takže funguje pouze pro kódování, která jsou nadmnožinami ASCII. Takže pokud byste jej chtěli použít, museli byste zapsat celý soubor jako UTF-8 a poté celý soubor překódovat do UTF-16.
Místo toho možná budete chtít zvážit jiný (nebo svůj vlastní) zapisovač CSV; stejně jako je nepříjemné používat pro kódování bez ASCII, fputcsv
také nevyhovuje standardu RFC pro soubory CSV, takže můžete snadno generovat soubory, které většina softwaru spotřebovávajícího CSV nedokáže správně načíst.
Vestavěné CSV funkce PHP jsou v podstatě naprostou ztrátou času každého.