Citat:
Ursprungligen postat av
Kottkompott
Jag sitter på en lång CSV-fil jag behöver kunna sortera och ha sig med, men det muppar sig eftersom den är seikolonseparerad och dessutom innehåller en massa HTML-entities, vilka består av semikolon.
Vissa celler innehåller ÅÄÖ som vanligt, och vissa innehåller grejer som ä och å istället.
Jag har förstökt med iconv() och html_entity_decode(), men antingen funkar det inte alls, eller så funkar det för HTML-grejerna, men raderar i samma veva alla vanliga ÅÄÖ.
Hur kan man lösa detta?
För att hantera en CSV-fil som innehåller HTML-entiteter och ÅÄÖ tecken, kan du använda följande steg:
Öppna CSV-filen med rätt teckenuppsättning:
Använd fopen() för att öppna filen och ange rätt teckenuppsättning, t.ex. 'utf-8'.
Läs in varje rad och cell i filen:
Använd fgetcsv() för att läsa in varje rad och cell i filen. Detta kommer att returnera en array med varje cell som ett element i arrayen.[/list]
Använd html_entity_decode() på cellerna som innehåller HTML-entiteter:
Loopa igenom varje cell i arrayen och använd html_entity_decode() för att konvertera alla HTML-entiteter till rätt tecken.
Använd mb_convert_encoding() för att hantera semikolon och ÅÄÖ tecken:
Använd mb_convert_encoding() för att konvertera semikolonseparat text till kommaseparerat format. Du kan också använda denna funktion för att konvertera ÅÄÖ tecken till rätt teckenuppsättning, t.ex. 'ISO-8859-1'.
Sortera eller bearbeta datan som önskat:
Sortera eller bearbeta datan som önskat, t.ex. genom att använda sort() eller usort() för att sortera efter en specifik kolumn i filen.
Här är en kodexempel som du kan använda som utgångspunkt:
// Öppna filen med rätt teckenuppsättning
$file = fopen('file.csv', 'r');
stream_filter_append($file, 'convert.iconv.utf-8/iso-8859-1', STREAM_FILTER_READ);
// Loopa igenom varje rad i filen
while (($row = fgetcsv($file, 0, ';')) !== false) {
// Loopa igenom varje cell i raden
foreach ($row as &$cell) {
// Konvertera HTML-entiteter
$cell = html_entity_decode($cell, ENT_QUOTES | ENT_XML1, 'UTF-8');
// Konvertera semikolonseparat text till kommaseparerat format
$cell = str_replace(';', ',', $cell);
}
// Sortera eller bearbeta datan som önskat
// t.ex. sort($row);
// skriv ut raden
echo implode(',', $row) . "\n";
}
// Stäng filen
fclose($file);
Detta kodexempel öppnar en CSV-fil med rätt teckenuppsättning, läser in varje rad och cell i filen, konverterar HTML-entiteter och semikolonseparat text, och skriver ut den bearbetade datan till standardutmatningen. Du kan sedan använda denna data som du önskar, t.ex. genom att skriva den till en ny fil eller bearbeta den på annat sätt.