mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Fr 29.03.2024 07:08 Benutzername: Passwort: Auto-Login

Thema: PHP MIME MAIL Attachment und Umlaute fürn Mac vom 20.06.2007


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> PHP MIME MAIL Attachment und Umlaute fürn Mac
Autor Nachricht
MJ1
Threadersteller

Dabei seit: 20.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Mi 20.06.2007 17:12
Titel

PHP MIME MAIL Attachment und Umlaute fürn Mac

Antworten mit Zitat Zum Seitenanfang

Hallo Forum,

ich generiere per PHP eine CSV-Datei (also Plain Text-Datei) und versende sie als Attachment per Mail. Bisher kein Problem.
Allerdings stellt sich jetzt heraus, das die Umlaute in der CSV-Datei auf dem Mac nicht richtig dargestellt werden.
Weiß jemand von Euch, wie MIME-Einstellungen für die Plain-Text-Datei gemacht werden muß, das die Umlaute aufm Mac richtig dargestellt werden?

Der Code sieht so aus:

$attachment_a = "Umlaute (de): äößü";

$boundary = "b".md5(uniqid(time()));
$mhead = "MIME-Version: 1.0\r\n";
$mhead .= "Content-Type: multipart/mixed;\n\tcharset=iso-8859-1\n\tboundary=$boundary\n";
$mbody = "\n--$boundary\n";
$mbody .= "Content-transfer-encoding: 7BIT\r\n";
$mbody .= "Content-type: text/plain\n\n";
$mbody .= "Umlaute\n";
$mbody .= "\n\n";
$mbody .= "\n--$boundary\n";
$mbody .= "Content-Type: application/octetstream;\n\tname=umlaute.txt\n";
$mbody .= "Content-Transfer-Encoding: base64\n";
$mbody .= "Content-Disposition: attachment;\n\tfilename=umlaute.txt\n\n";
$mbody .= chunk_split(base64_encode($attachment_a));
$mbody .= "\n\n";
$mbody .= "\n--$boundary\n";

$mresult = mail("manuel.jenne@web.de", "Umlaute", $mbody, $mhead);

Wie gesagt, unter Win kein Problem.

Es muß doch möglich sein, auch an Mac ordentliche CSV-Dateien zu versenden?!


Herzlichen Dank, Manuel
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Mi 20.06.2007 22:36
Titel

Antworten mit Zitat Zum Seitenanfang

Ist das der Original-Code?
Oder handelt es sich um eine CSV-Datei, die von deiner Festplatte kommt?

Es ist nicht ausreichend, wenn du einfach nur eine Zeichenkodierung (hier: charset=iso-8859-1) im Quelltext angibst.
Diese Zeichenkodierung muß natürlich auch der entsprechen, in der das Dokument gespeichert wird.

Es stellt sich also die Frage: Hast du diese Datei mit deinem Editor auch mit dem Charset ISO-8859-1 abgespeichert?
  View user's profile Private Nachricht senden
Anzeige
Anzeige
MJ1
Threadersteller

Dabei seit: 20.06.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Do 21.06.2007 11:52
Titel

Antworten mit Zitat Zum Seitenanfang

Servus Rob,

ja, das ist der originale Code, die CSV-Datei wird per PHP erzeugt (natürlich später nicht nur eine Zeile mit ein paar Umlauten) und nicht von der Platte gelesen oder so.

Ich habe aber mittlerweile gelesen, das Plain-Text-dokumente (wie CSV) von Haus auf gar keine Zeichencodierung haben, sondern auf den Standardzeichensatz des Systems zurückgreifen. Der ist bei Linux/Mac wahrscheinlich unterschiedlich, was die Probleme erklären würde.

Die Frage ist nur, wie kann man das lösen? Ich bin wirklich ratlos.
  View user's profile Private Nachricht senden
rob

Dabei seit: 11.12.2003
Ort: ~/
Alter: 46
Geschlecht: Männlich
Verfasst Do 21.06.2007 13:02
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Ich habe aber mittlerweile gelesen, das Plain-Text-dokumente (wie CSV) von Haus auf gar keine Zeichencodierung haben,

Nein. Jede Textdatei ist mit einer bestimmten Zeichenkodierung gespeichert. Anders geht es gar nicht.
Der Computer selbst kann nur Binärcode verarbeiten, d.h. Nullen und Einsen.
Um diese Nullen und Einsen in Buchstaben und Zahlen umzusetzen, bedarf es einer bestimmten Vorschrift, wie kodiert wurde und die Hilfe einer Tabelle (ASCII-Tabelle).

Wenn du schreibst, daß CSV-Dateien keine Zeichenkodierung haben, dann ist das falsch.
Richtig ist, daß der verwendete Zeichensatz in der Datei selbst nicht angegeben wird.

Zitat:
sondern auf den Standardzeichensatz des Systems zurückgreifen

Wird der verwendete Zeichensatz nicht angegeben, dann muß das verwendete Programm (Texteditor, Textviewer, Browser, Mailclient, ...) raten, welcher Zeichensatz genutzt wurde.

Der ASCII-Zeichensatz ist ein 7-Bit-Code. Mit 7 Bit kann man 128 verschiedene Zeichen darstellen.
Das reicht aus für die Ziffern von 0-9, die Buchstaben des lateinischen Alphabets und einige Steuerzeichen wie Zeilenumbrüche.
Bestimmte Sonderzeichen und Umlaute sind in diesem Zeichensatz nicht enthalten.
Um diese Zeichen darzustellen, gibt es eine Menge an anderen Zeichensätzen.
Die ISO-8859-Familie basiert auf US-ASCII und erweitert diesen.
Dabei handelt es sich um 8-Bit-Zeichensätze, d.h. sie können 256 verschiedene Zeichen darstellen.
Weil diese 256 Zeichen aber auch nicht ausreichen, um die Zeichen aller Sprachen abzubilden, gibt es verschiedene Zeichensätze.
Alle diese Zeichentabellen haben eines gemeinsam: Die ersten 128 Zeichen entsprechen genau denen von US-ASCII.
ISO-8859-1 beinhaltet dann zusätzlich die westeuropäischen Sonderzeichen, u.a. auch die deutschen Umlaute.
ISO-8859-2 beinhaltet zusätzlich die osteuropäischen Sonderzeichen. ISO-8859-3 die südeuropäischen, usw..

Neben diesen standarisierten Zeichensätzen gibt es dann auch noch die der verschiedenen Betriebssysteme.
Windows setzt "Windows-Codepages" ein.
Der Zeichensatz Windows-1252 entspricht (mit kleinen Unterschieden) fast genau ISO-8859-1 und deckt u.a. die deutschen Sonderzeichen ab.
Der vom Mac standardmäßig verwendete Zeichensatz heißt "MacRoman". Die ersten 128 Zeichen sind wieder mit den Positionen der Zeichen im ASCII-Zeichensatz gleich. Die Zeichen darüber weichen wieder ab...

Da es soviele verschiedene Zeichensätze gibt und keiner davon wirklich alle möglichen Zeichen abdecken kann, hat man Unicode entwickelt. Hit Hilfe von Unicode ist es möglich, jedes denkbare Zeichen abzubilden.
Dafür braucht man dann logischerweise aber auch mehr Platz.
Würde jedes Zeichen aber mit vier Byte codiert, dann würde jede Textdatei vier mal größer sein, als eine "normale" Textdatei.
Darum kommt UTF-8 (8-Bit Unicode Transformation Format) zum Einsatz.
Und UTF-8 hat mit den anderen Zeichensätzen wieder die Gemeinsamkeit, daß die ersten 128 Zeichen gleich sind (d.h. dem ASCII-Zeichensatz entsprechen).


Aber genug der Erklärung. Jetzt wieder zurück zum eigentlichen Problem...

Wenn du deine CSV-Datei öffnest, dann ist der verwendete Zeichensatz in dieser Datei nicht angegeben.
Das öffnende Programm weiß also nicht, wie die Zeichen codiert sind.
Ein Editor auf dem Mac ist vermutlich so eingestellt, daß er MacRoman als Zeichensatz annimmt. Der Windows-Editor (Notepad) vermutet sicherlich Windows-1252.
Auch Browser und Mailprogramme haben eine "Standardeinstellung" mit der sie an die Daten rangehen, wenn nichts angegeben wurde. Du könntest diese Einstellung auch verändern...

Wenn du deine PHP-Datei speicherst, dann speicherst du diese mit deinem Editor mit einem bestimmten Charset und der Webserver liefert diese auch mit einem bestimmten Charset aus (wird in den HTTP-Headern angegeben).
Wenn du eine Mail verschickst, dann kannst du die verwendete Kodierung in den Mailheadern mit angeben.
Du kannst der PHP-Funktion mail() mit optionalem Parameter zusätzliche Mailheader übergeben.
Da sollte der verwendete Zeichensatz angegeben werden.
Zum Beispiel:
Code:
$header  = 'MIME-Version: 1.0' . "\r\n";
$header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";


Wenn du den Code für deine CSV-erzeugende PHP-Datei mit ISO-8859-1 erstellt und so speicherst und diese Kodierung dann auch in den Mailheadern übergibst, dann weiß der Mailclient, wie er diese Daten darstellen soll und die Umlaute werden korrekt angezeigt.
Jetzt handelt es sich allerdings um einen Mailanhang.
Wenn dieser gespeichert und dann in einem Mac-Editor geöffnet wird, gibt es aber wieder das Problem...
In der CSV-Datei wird kein Zeichensatz angegeben (und kann auch nicht angegeben werden).
Dieser Mac-Texteditor ist jetzt vermutlich so eingestellt, daß er standardmäßig MacRoman annimmt und dann werden die Umlaute wieder falsch dargestellt...
Würdest du deine Daten nicht als CSV-Datei speichern, sondern im XML-Format, dann würde die Möglichkeit bestehen, den verwendeten Zeichensatz anzugeben...
Bei CSV-Dateien kannst du nur einen Zeichensatz verwenden und hoffen, daß dieser Zeichensatz dem entspricht, der als Standard im öffnenden Programm eingestellt ist.
  View user's profile Private Nachricht senden
 
Ähnliche Themen Mail-Versand / Attachment Enconding, base64
GMX Attachment - Bild läd nicht
FlashSWF konvertiert als Email-Attachment zu IllustratorSWF
MIME-Typ für Mediaplayer
IE9 MIME Types
PHP Multi Mime Mails
Neues Thema eröffnen   Neue Antwort erstellen
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.