@Sweedland: Först: Om det handlar om en csv så ska du inte använda nl2br()
på outputen eftersom att det ersätter alla radbrytningar med <br/>
-taggar; har det sett riktigt ut på skärmen så har du antagligen tittat på dokumentet som om det vore html snarare än text/csv, och då är inte din csv rätt formaterad.
Sedan till teckenkodningen: Eftersom att du ser två tecken istället för åäö och du har fått fram att de består av x'C3A5 (litet å i UTF-8) etc. så låter det som att din data är UTF-8, men Excel har antagligen tolkat den som Windows-1252. Använde du den vanliga filöppningsdialogen? IIRC så låter den dig inte välja teckenkodning själv, men du kan prova Data > From Text och välja UTF-8 som första steg i wizarden istället. För att göra det lättare för din användare, och om all din data går att representera i Windows-1252 (som bör vara default för en västeuropeisk excelinstallation), så kan du konvertera till det så här (som i @jreklund's svar):
header("Content-Type: text/csv; charset=windows-1252");
$data = file_get_contents("/din/fil/kodad-som-utf8.csv");
$data = mb_convert_encoding($data, "windows-1252", "UTF-8");
echo $data;
Använd inte str_replace
för att försöka konvertera mellan teckenkodningar, det blir mycket mer att skriva och det kommer uppstå missar även med trivial förväntad input (det finns t.ex. flera olika sätt att representera ett litet å). Glöm inte att uppdatera din Content-Type
-header så att resultatet visas som det ska i webbläsaren också.
Teckenkodningsproblem är notoriskt svåra att felsöka utan att se data och process. Om ovanstående inte skulle lösa problemet så skulle det hjälpa om du kunde dela din kod och representativ data (var försiktig med hur du kopierar så att du inte råkar konvertera något på vägen).