$key = mb_convert_encoding($key, 'UTF-16BE', "auto");
(Weet je zeker dat je BE wilt? Het is een vrij zelden gebruikte codering. Windows "Unicode" is UTF-16LE.)
Ik zou het gebruik van "auto"
vermijden als de from_encoding. Het is een onbetrouwbare bodge die vaak de verkeerde resultaten oplevert, vooral bij korte snaren. Aangezien de invoer blijkbaar UTF-8 is, moet u dat in plaats daarvan expliciet vermelden.
fputcsv($f, array_merge($firstLineKeys, $lineEncoded));
Helaas fputcsv
kan niet schrijven naar een UTF-16-gecodeerd bestand. Het gebruikt single-byte ASCII-komma's/quotes/newlines, dus het werkt alleen voor coderingen die ASCII-supersets zijn. Dus als je het wilt gebruiken, moet je het hele bestand als UTF-8 schrijven en het hele bestand vervolgens transcoderen naar UTF-16.
Misschien wilt u in plaats daarvan een andere (of uw eigen) CSV-schrijver overwegen; en niet alleen vervelend om te gebruiken voor niet-ASCII-coderingen, fputcsv
voldoet ook niet aan de RFC-standaard voor CSV-bestanden, dus u kunt gemakkelijk bestanden genereren die de meeste CSV-intensieve software niet goed kan laden.
De ingebouwde CSV-functies van PHP zijn in wezen een complete verspilling van ieders tijd.