2016-09-07 3 views
1

archivieren Ich habe diese Funktion, um eine CSV zu importieren.Kann nicht richtig in csv in PHP

public function csv_to_array($filename, $delimiter = ',', $enclosure = '"') 
{ 

    $header = null; 
    $data = array(); 


    if (($handle = fopen($filename, 'r')) !== false) 
    { 

     $all = 0; 

     while(($row = fgetcsv($handle, 0, $delimiter, $enclosure)) !== false) 
     { 

      $i=0; 
      foreach($row as $string) { 
       $row[$i] = utf8_encode($string); 
       $i++; 
      } 

      if(!$header) { 
       $header = $row; 
      }else{ 
       $data[] = array_combine($header, $row); 
      } 
      $all++; 
     } 

     fclose($handle); 

    } 

    return $data; 
} 

Einige Dateien, die in ANSI Encoding kommen, funktionieren nicht mit str_getcsv oder fgetcsv. Ich habe auch versucht, sie mit

mb_convert_encoding($line, 'Windows-1252', 'UTF-8'); 

oder mit iconv, utf8_encode, ...

In anderen Projekten zunächst zu konvertieren ich nie über dieses Problem gestolpert. Normalerweise führt das oben beschriebene, aber diesmal nicht. Das gesamte System und die Datenbank sind auf utf-8 eingestellt. Gibt es eine bekannte Arbeit, wie kann ich mein Problem lösen? Ich bin hilflos :(

+0

Wie viele Problemzeichen gibt es? Wenige oder viele? –

+0

Ich hatte dieses Problem auch, ich überprüfte einfach, ob es utf8 ist: ['schnipsel'] (https://git.io/vicjj) – CodeBrauer

+2

' ANSI Encoding' ist zu generisch. Sie müssen absolut sicher sein, dass die Eingabecodierung "Windows-1252" ist und nicht etwas anderes. – apokryfos

Antwort

1

Sie sind nicht direkt einem der Codierungsfunktionen Wenn Sie aus dem Windows-1252 auf UTF-8 beides nicht funktioniert konvertieren möchten.

utf8_encode($string) 

... wandelt von ISO-8859-1 auf UTF-8 (reference).

mb_convert_encoding($line, 'Windows-1252', 'UTF-8'); 

... wandelt von UTF-8 auf Windows-1252 (reference).

Wenn Sie in Eile sind, lesen Sie einfach die Dokumentation ;-)