2016-06-28 25 views
2

ich diesen Code in PHP haben, die eine CSV-Datei geöffnet wird, liest die erste Zeile in einem Array und zeigt den Inhalt:fopen zeigt ungültige Zeichen zu Beginn des CSV

if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firstLine = fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
} 

Das Problem ist, dass die gedruckte Array Zeigt Array ([0] => increment_id... Wo sollte es sein Array ([0] => increment_id.... Ich weiß nicht, wo diese ersten Zeichen herkommen, da sie nicht vorhanden sind, wenn ich die csv-Datei mit Notepad ++ öffne. Ich denke, ich könnte die Datei in eine andere Kodierung konvertieren, aber das wäre schwierig, da es die Ausgabe eines Programms ist, das ich nicht gemacht habe, außer es gibt eine Möglichkeit, es mit PHP neu zu kodieren.

+2

Die Datei hat am Anfang eine [Byte-Reihenfolgezeichen] (https://en.wikipedia.org/wiki/Byte_order_mark). –

+1

Es ist die [BOM] (https://en.wikipedia.org/wiki/Byte_order_mark) (Byte-Order-Mark) codiert als [UTF-8] (https://en.wikipedia.org/wiki/Byte_order_mark # UTF-8). Es ist in der Datei vorhanden, aber die Texteditoren zeigen es nicht an (technisch gesehen ist es ein nicht druckbares Zeichen), sondern verwenden es, um etwas über die Codierung der Zeichen in der Datei zu erfahren. – axiac

Antwort

2

In Notepad ++, die Datei öffnen, als gehen zu "Encoding" Menü als wählen „Encode in UTF-8 ". Speicher die Datei. Diese 3 Bytes sind weg.

Oder Sie könnten wie folgt tun:

file_put_contents($file, str_replace("\xEF\xBB\xBF", "", file_get_contents($file))); 
if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firstLine = fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
} 

dies wird UTF-8 Signatur von Datei entfernen.

+1

ok =) versuche dies: '$ firstLine = fgetcsv (str_replace (" \ xEF \ xBB \ xBF "," ", $ tmp), 0,", ");' – spirit

+0

Richtig! Vergessen Sie das total =). Einen Moment bitte. – spirit

+0

repariert meine Antwort – spirit

0

Im Moment lesen und analysieren Sie die Datei direkt als CSV. Ändern Sie den Ansatz: Lesen Sie die Datei als Zeichenfolge dann analysieren die Zeichenfolge als CSV, Beispiel:

<?php 
/*$file = "test.csv"; 
if (($tmp = fopen($file, "r")) !== FALSE) { 
    $firs= fgetcsv($tmp, 0, ","); 
    print_r($firstLine); 
}*/ 
$handle = fopen("test.csv", "r"); 
$line = fgets($handle);   // GET FIRST LINE IN FILE. 
$line = str_getcsv($line, ","); // PARSE LINE AS CSV. 
print_r($line); 
?>