Hallo liebe Kolleginnen und Kollegen,
Ich hab ein kleines Problem mit meinem Script.
Ich exportiere einen SQL query als csv. Nach dem Export habe ich in den Rohdaten im Editor (nicht Excel) das bekannte Fragezeichen in der schwarzen Raute, an der Stelle wo sich ansonsten Umlaute befinden.
Ich hab die Forensuche mehrfach durch und fast alles ausprobiert.
habe es mit
iconv,
utf8_encode(),
utf8_decode(),
mb_convert_encoding,
und etlichen charsets von utf-8 über windows-1252 bis zu latin-1
versucht.
Erfolglos!
auch
im Cleanup brachte keine Hilfe
Eventuell seht ihr ja den Fehler, ich seh´ vor lauter Bäumen den Wald nicht mehr.
Hier mein Script:
Vielen Dank euch !
Edit: Kollation der Tabelle ist utf8_unicode_ci, datentyp mediumtext
Ich hab ein kleines Problem mit meinem Script.
Ich exportiere einen SQL query als csv. Nach dem Export habe ich in den Rohdaten im Editor (nicht Excel) das bekannte Fragezeichen in der schwarzen Raute, an der Stelle wo sich ansonsten Umlaute befinden.
Ich hab die Forensuche mehrfach durch und fast alles ausprobiert.
habe es mit
iconv,
utf8_encode(),
utf8_decode(),
mb_convert_encoding,
und etlichen charsets von utf-8 über windows-1252 bis zu latin-1
versucht.
Erfolglos!
auch
PHP-Code:
function convertToWindowsCharset($string) {
$charset = mb_detect_encoding(
$string,
"UTF-8, ISO-8859-1, ISO-8859-15",
true
);
$string = mb_convert_encoding($string, "Windows-1252", $charset);
return $string;
}
Eventuell seht ihr ja den Fehler, ich seh´ vor lauter Bäumen den Wald nicht mehr.
Hier mein Script:
PHP-Code:
<?php
// Trennzeichen
define("csv_delimeter", ";");
// Datenbankeinstellungen
define("db_user", "xxx");
define("db_password", "xxx");
define("db_server", "xxx");
define("db_db_name", "xxx");
// Verbinden und Datenbank auswählen
mysql_connect(db_server, db_user, db_password) or die(mysql_error());
mysql_select_db(db_db_name) or die(mysql_error());
// Abfrage
$sql = "SELECT T1.ordernumber AS articlenumber, T2.*
FROM s_articles_details T1, s_articles T2
WHERE T1.articleID = T2.ID";
// Abfrage ausführen
$result = mysql_query($sql) or die(mysql_error());
$result_row = array();
// jede Zeile bearbeiten
while ( $array_result = mysql_fetch_assoc($result) )
{
// keine Titelzeile vorhanden? (Array leer?)
if ( empty($result_row) )
{
// erste Zeile initialisieren
$result_row[] = "";
$row_data = array();
$index = count($result_row)-1; // Index holen
// Schleife durchlaufen für die Titelzeile
foreach ( array_keys($array_result) as $key_name )
{
$row_data[] .= "\"" . $key_name . "\"";
}
$result_row[$index] = implode(csv_delimeter, $row_data);
unset($row_data);
}
// neue Zeile initialisieren
$result_row[] = "";
$row_data = array();
$index = count($result_row)-1;
foreach ( $array_result as $key => $value )
{
$row_data[] .= "\"" . $value . "\"";
}
$result_row[$index] = implode(csv_delimeter, $row_data);
unset($row_data);
}
// Header setzen
header('Content-type: application/csv; charset=Windows-1252');
header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT');
header('Content-Disposition: attachment; filename=artikel.csv');
header('Pragma: no-cache');
echo pack("CCC",0xef,0xbb,0xbf);
echo implode(PHP_EOL, $result_row);
?>
Edit: Kollation der Tabelle ist utf8_unicode_ci, datentyp mediumtext
Kommentar