ERLEDIGT
NEIN
NEIN
ANTWORTEN
10
10
ZUGRIFFE
1550
1550
EMPFEHLEN
-
Hallo zusammen,
ich habe mir eine Exportfunktion geschrieben, die mir MySQL-Daten rauslesen soll und per header() als Exceldatei zum speichern anbieten soll. Das funktioniert auch ohne Probleme. Doch leider machen die verflixten Umlaute wieder mal Schwierigkeiten. Diese werden nämlich ganz komisch angezeigt:
ä wir zu √§
ü wir zu √º
ö wir zu √∂
Die MySQL-Tabelle sowie jedes Feld in der Tabelle hat die Kollation utf8_general_ci.
Bei der MySQL-Verbindung habe ich hinzugefügt:
Zudem habe ich im Exportfile folgenden Befehl ganz oben eingefügt:PHP-Code:mysql_query("SET NAMES 'utf8'", $verbindung);
mysql_query("SET CHARACTER SET 'utf8'", $verbindung);
Doch eben, das alles nützt nichts. Kann mir jemand helfen, was ich noch ändern muss? Wenn ihr noch mehr Code braucht, einfach schreiben, liefere ich gerne.PHP-Code:header("Content-type: text/html; charset=utf-8");
Lieber Gruss & herzlichen Dank im Voraus.
Euer Pinky
-
Bis du dir so sicher das MS Excel UTF-8 kann? Ich hatte bisher noch keine Möglichkeit gefunden eine CSV Datei in utf8 in Excel korrekt darzustellen.
Vielleicht solltest du mal mit iso 8859 als Zeichensatz des Dokumentes versuchen.Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
-
Danke für die Antwort.
Habe den Header in der Datei mal auf folgende Zeile geändert:
Danach exportierte ich nochmals, doch die Umlaute sind immer noch unschön.PHP-Code:header("Content-type: text/html; charset=ISO-8859-1");
Darauf änderte ich die Kollation in der MySQL-DB auf latin1_general_ci und exportierte nochmals das File, doch auch dies blieb ohne Erfolg.
Ich verstehe diesen ganzen Zeichencodierungsjungel überhaupt nicht, darum bin ich auch dermassen ratlos. Warum gibt es so viele Codierungen? Ist das lediglich computerentwicklungsbedingt?
Bin gerne für weitere Ratschläge offen
.
Danke vielmals & lieber Gruss
Euer Pinky
-
Die Header ausgabe zuändern genau wie die Datenbank bringt nichts, da die Daten warscheinlich schon als UTF8 darin enthalten sind. Die collation hinterher zu ändern. Ändert nichts an den Daten und damit machst du es nur noch schlimmer .)
Entweder du sagst der Datenbankverbinung das es die Daten bei der Ausgabe nach iso hin codieren soll. Oder du verwendest utf8_decode() auf die entsprechenden Felder.Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral.
-
Danke für die schnelle Antwort. Habe ich sofort versucht und tatsächlich ist etwas geschehen. Die Umalute werden nun folgendermassen dargestellt (muss das etwas grösser machen, damit die Zeichen erkannt werden können):
ä wird zu ‰
ö wird zu ˆ
ü wird zu ¸
Ich habe auch gerade versucht, dieses Zeichen perin ä, ö, ü's umzuwandeln mit negativem Resultat. Nichts geschah...!PHP-Code:str_replace()
Was ich noch nicht versucht habe ist, der Datenbankverbindung zu sagen, sie soll mir die Daten ISO-Codiert rausgeben. Wie mach ich das? Muss ich da imirngedwo die Codierung angeben?PHP-Code:mysql_query("SELECT * ... ")
Danke für weitere Vorschläge & lieber Gruss
Euer Pinky
-
Ich habe zwischenzeitlich noch etwas rumprobiert. So hab ich z.B. folgende Codes getestet:
undPHP-Code:$value = mb_convert_encoding($value, "ISO-8859-1", mb_detect_encoding($value, "UTF-8, ISO-8859-1", true));
Leider blieben auch diese beide erfolglos.PHP-Code:$value = iconv('UTF-8', 'ISO-8859-1//TRANSLIT//IGNORE', $value);
Danke für jede weitere Anmerkung.
Lieber Gruss
Euer Pinky
-
Hallo Pinky,
exportierst Du die MYSQL-Daten in ein CSV-File? Excel hat bei bei einem meiner Exports die BOM benötigt. Vielleicht hilft es?
In meinem Code wurde die BOM in eine Datei geschrieben, Du musst es eben "echoen".PHP-Code:fwrite($temp, b"\xEF\xBB\xBF"); //write BOM
Viele GrüßeBullja | marsal.biz
-
Hallo,
danke für die Antwort. Ich versteh nicht ganz, was du damit meinst, dass ich es eben "echoen" muss (also ich weiss, was du damit meinst, aber ich weiss nicht, wie ich es machen muss
.
Ich weiss eben nicht, ob ich dem System vorgaukle, ein .XLS zu erstellen, in Wahrheit aber ein .CSV erstellt wird.
Mein Code zum erstellen des Scripts ist folgender. Wo muss ich nun den BOM einbauen? Die Funktion fwrite() kann ich ja schlecht verwenden...!
Herzlichen Dank & lieber GrussPHP-Code:<?
header("Content-type: application/vnd-ms-excel");
header("Content-Disposition: attachment; filename=".$_GET[cat].".xls");
header("Pragma: no-cache");
header("Expires: 0");
$res = mysql_query("SELECT * FROM `datenbank`");
$db_felder = array( "name" , "vorname");
$num = count($db_felder);
for ($i=0; $i<$num; $i++)
{ $header .= ucfirst($db_felder[$i]) . "\t"; }
echo $header."\n";
while($row = mysql_fetch_array($res))
{
$line = '';
foreach($db_felder as $value)
{
if ((!isset($value)) OR ($value == ""))
{
$value = "\t";
}
else
{
$value = $row[$value];
$value = str_replace('"' , '""' , $value);
$value = '"' . $value . '"' . "\t";
}
$line .= $value;
}
$data .= trim($line)."\n";
}
$data = str_replace("\r","",$data);
if ($data == "")
{
$data = "\n(0) Keine Datenätze gefunden!\n";
}
print "$headern$data";
?>
Euer PinkyGeändert von Pinky (18.06.10 um 11:09 Uhr)
-
Die BOM liegt in den ersten drei Byte einer Datei, bei Dir muss es also vor dem Tabellenkopf ausgegeben werden:
Bei der Schreibweise bin ich mir nicht sicher, es scheint Versionsabhängig zu sein. Ich empfehle Dir außerdem mal den Befehl fputcsv anzuschauen, mit welchem Du Daten ins CSV-Format wandeln kannst. Übrigens sollte die Dateiendung, nicht *.xls sondern *.csv sein, denn XLS sind Binärdaten.PHP-Code:echo b"\xEF\xBB\xBF";
echo $header."\n";
Bullja | marsal.biz
-
Hi,
der Content-Encoding header und die BOM haben überhaupt keinen Einfluss auf Excel-Dateien, da diese ein Binärformat sind, und Header und BOM nur für Textformate gelten.
Außerdem erscheint mir die Ausgabe, die du erzeugst eher CSV oder TSV oder etwas ähnliches zu sein, in dem Fall wäre der Content-Type header definitiv nicht richtig."Die Deutsche Rechtschreibung ist Freeware, dass heisst jeder kann sie benutzen wann er will, ohne dafür zu zahlen. Sie ist aber nicht Open Source, also darf sie ohne Zustimmung der Entwickler nicht verändert und weiterverbreitet werden."
-
Moin,
zusätzlich zu den von EvilO gemachten Anmerkungen betreffs CSV:
Excel lässt sich lt. meiner Erfahrung keinen Zeichensatz aufzwingen, ASCII dürfte da der kleinste gemeinsame Nenner sein.
Ich würde dort also auf UTF8 verzichten, und die Daten generell nach Latin1 oder CP1252 umwandeln, damit sollte Excel klarkommen.
Ähnliche Themen
-
Daten aus MySQL zeigen Umlaute falsch
Von DarkRaver im Forum PHPAntworten: 0Letzter Beitrag: 08.11.10, 18:55 -
Export einer Csv Datei aus Excel mittels VBA
Von KeinName im Forum Visual Basic 6.0Antworten: 0Letzter Beitrag: 08.05.07, 14:37 -
Access - export von Daten nach Excel
Von rockabillyjimmy im Forum Office-AnwendungenAntworten: 1Letzter Beitrag: 18.05.05, 08:49 -
Mysql in Excel exportieren (Umlaute beibehalten, wie geht das)
Von Kai-Behncke im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 29.04.05, 16:16 -
Export von Abfragedaten aus MySQL nach Excel
Von grillmeister im Forum Relationale DatenbanksystemeAntworten: 7Letzter Beitrag: 19.03.05, 09:37





Zitieren
Login






[PHP][Snippet] Array zu XML konvertieren