Finde zunächst heraus, welche Kodierung vorliegt und welche erwartet wird. Um den ersten Teil zu beantworten kann ein Browser helfen. Öffne die Datei und stelle im Menü Ansicht verschiedene Zeichenkodierungen ein (ISO-8859-1 und UTF-8 sind dabei am sinnvollsten). Wenn die Umlaute richtig dargestellt werden, ist es diese Kodierung. Allerdings wird das bei Binärdateien, wie .xls eine sein wird, nicht besonders von Erfolg gekrönt sein.
Okay, ich hole mal etwas weiter aus. Auf der Website wird die MySQL-Tabelle mit PHP ausgegeben:
<?php
$sql = "SELECT name, vorname, adresse, plz, ort FROM adressen";
$erg = mysql_query($sql);
?>
<table>
<?php
echo "<tr>";
echo "<td><h3>Name, Vorname</h3></td>";
echo "<td><h3>Adresse</h3></td>";
echo "<td><h3>PLZ</h3></td>";
echo "<td><h3>Ort</h3></td>";
echo "</tr>";
while ($zeile = mysql_fetch_assoc($erg)) {
echo "<tr>";
echo "<td>" . $zeile["name"] . " " . $zeile["vorname"] . "</td>";
echo "<td>" . $zeile["adresse"] . "</td>";
echo "<td>" . $zeile["plz"] . "</td>";
echo "<td>" . $zeile["ort"] . "</td>";
echo "</tr>";
}
?>
</table>
<a href="adressen_export.php?sql=<?php echo $sql ?>">Adressen als Excel-Tabelle herunterladen</a>
====================================================
Die Datei adressen_export.php erzeugt den Export:
<?php
include "../scripts/datenbank.php";
$sql = stripslashes($_GET["sql"]);
$erg = mysql_query($sql);
$felder = mysql_num_fields($erg);
for ($i = 0; $i < $felder; $i++) {
$header .= ucfirst(mysql_field_name($erg, $i)) . "\t";
while ($zeile = mysql_fetch_row($erg)) {
$linie = '';
foreach($zeile as $wert) {
if ((!isset($wert)) OR ($wert == "")) {
$wert = "\t";
} else {
$wert = str_replace('"', '""', $wert);
$wert = '"' . $wert . '"' . "\t";
}
$linie .= $wert;
}
$data .= trim($linie) . "\n";
}
$data = str_replace("\r", "", $data);
}
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=Adressen.xls");
header("Pragma: no-cache");
header("Expires: 0");
echo "$header\n$data";
?>
====================================================
Wenn ich den Link anklicke, startet der Download der Excel-Datei. Die Spaltennamen und alle Inhalte werden korrekt übernommen, ausser die Umlaute. Die sehen in Excel dann so aus:
ä wird zum Promillezeichen
ö wird zu ^
ü wird zu einem Cedille.