• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Merkwürdige Sonderzeichen-Boxes nach CSV-Export (Firefox)

Hallo,
ich habe aus einer CSV-Datei bestimmte Werte per PHP (fgetcsv()) ausgelesen und diese dann als Tabelle anzeigen lassen.
Schaut man sich das Ergebnis im Internet Explorer an, stimmt auch alles. Nur der Firefox macht zwischen jedes Zeichen eine Box mit kleinen Buchstaben darin (die ich nur für undefinierbare Zeichen kenne).
Woran kann das liegen, bzw wie kann ich das beseitigen?

Hier jeweils ein Screenshot des Ergebnisses:
IE (richtig)
datei_IE.jpg

Firefix (falsch)
datei_FF.jpg


Schonmal danke im Vorraus!
lg
 
Werbung:
Werbung:
hier der Code
PHP:
<?php
$filename = "./stuff/file.csv";
$id = fopen($filename, "r");

while ($data = fgetcsv($id, filesize($filename), "\t"))
$table[] = $data;
fclose($id);

echo "<table border=\"1\">\n";
foreach($table as $row)
{
    echo "<tr>";
    foreach($row as $data)   
        echo utf8_encode("<td>$data</td>");
    echo "</tr>\n";
}
echo "</table>\n";
?>
 
Werbung:
In den Seiteninformationen steht der im Header Angegebene (ISO 8859-1).
Ich habe grade testweise mal eine Andere CSV-Datei als Quelle genommen. Hier tritt das Problem nicht auf. Also dachte ich, dass die CSV-Datei vielleicht Zeichen enthält, die der FF nicht anzeigen kann - die CSV-Datei direkt (in .txt umbenannt) zeigt er aber ohne Probleme und komische boxes an. Wie kann das sein?

lg
 
Werbung:
Und schon mal im Firefox bei Ansicht -> Zeichenkodierung nachgeschaut bzw. n bissel rumgespielt?

[EDIT]

Sorry, nicht aktualisiert vorm posten ^^
 
auch wenn jetzt klar ist, dass es irgendwie von der CSV-Datei abhängt ist ds Problem noch nicht gelöst.

Wie kann ich die Zeichen (boxes) aus dem Ergebnis rauslöschen? hatte schon an suchen und ersetzen (Bsp: preg_replace() ) gedacht, allerdings wüsste ich nicht wie, ohne zu wissen wofür die Boxes stehen.
Hat noch jemand eine Idee??
 
Zuletzt bearbeitet:
Die CSV-Datei hat sicher den Zeichensatz Windows-1250 wenn Du ihn nicht geändert hast. fgetcsv() ändert den Charset nicht. Im englischen Manual steht noch dieser Hinweis:

Note:
Locale setting is taken into account by this function. If LANG is e.g. en_US.UTF-8, files in one-byte encoding are read wrong by this function.

Heißt: fgetcsv versucht die Zeichen korrekt auszulesen, macht es aber nicht wirklich.

Aus dem Grund habe ich fgetcsv bisher auch nicht eingesetzt, es ist einfach zu ungenau bei der Zeichensatzbearbeitung. Es gibt aber Alternativen wie auch in den englischen Kommentaren zu der Funktion geschrieben wird:
PHP: fgetcsv - Manual

Mit diesen beiden Funktionen in diesem Beitrag müsstest Du mittels
Code:
fhandle = fopen($csv_datei,"r");
while($raw_row = fgets($fhandle, 0)) {
    $row = csvstring_to_array($raw_row, ',', '"', "\n");
    // $row enthält nun die Inhalte der Spalten einer Zeile
}
die Datei korrekt einlesen können.
 
Werbung:
Erstmal vielen Dank für eure bisherigen Bemühungen!

Die beiden Funktionen bekomme ich nicht wirklich zum laufen. Nachdem ich das fehlende $ hinzugefügt habe, sagt er mir dass der zweite Parameter bei fget() größer als null sein muss, setze ich diesen größer kommen neue Fehlermeldungen..und so weiter...
Ich bin auch nicht sicher ob die Funktionen wirklich helfen werden, da dies ja hieße, dass die Zeichen einzig durch die fgetcsv-Funkltion zustande kommen. Nehme ich die Datei aber per file() und explode() auseinander, entstehen die selben merkwürdigen Zeichen im Ergebnis. Einzig im offline-Editor (Bsp. Notepad++) sind die Zeichen nicht vorhanden. Wie kann das sein?

Edit: @freak131: Wie bekomme ich raus welches encoding im stream benutzt wird?

lg

Update:


ich bin mittlerweile ein ganzes Stück weiter gekommen:
Über die anzeige des Notepad++ bin ich darauf gekommen, dass das Dokument mit UCF-2 Little Endian codiert ist. Also habe ich als erstes versucht, das gesamte Dokument per file_get_contents() auszulesen, per iconv("UCS-2LE", "UTF-8", $string) nach UTF-8 zu konvertieren und dann auszugeben. Dies klappt einwandfrei.
Als nächstes habe ich veruscht die Datei zeilenweise auszulesen (file()), die Zeilen dann mit iconv() in utf-8 zu kovertiren und diese dann per explode zu trennen und das ganze als Tabelle anzuzeigen. Das Ergebnis ist: Die erste Zeile wird korrekt angezeigt. In allen weiteren Zeilen werden plötzlich chinesische oder Japanische Zeichen angezeigt - das ordinal-Dokument ist auschließlich deutsch! Was hat das zu bedeuten? Kann es sein, dass die erste Zeile eine andere kodierung als die restlichen hat?

Interessant ist, dass wenn ich nicht die ganze Zeile, sondern erst die per explode() getrennten Teile mit iconv() behandle, nur der erste Teil anstatt der ganzen Zeile richtig ist und der ganze Rest (auch teile die vorher richtig waren - da erste Zeile) chinesisch.
Kann es sein, dass iconv() den ersten 'Auftrag' anders behandelt als alle folgenden?
 
Zuletzt bearbeitet:
Zurück
Oben