komische UTF-8 codierung
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
absender
ausgabe
bestandteil
betreff
code
ergebnis
ersten tests
header
http
klartext
liste
manual
mime
postfach
string
text
type
umlaut
url
vorhandener nachrichten
- 
    
    Hallo
 
 ich versuche gerade einen kleines Script zum Checken auf neue Emails im einem Postfach
 und lese die Liste vorhandener Nachrichten mit imap_fetch_overview() aus, was auch klappt
 
 bei den meisten eMail Subjects (Betreff) mit Umlate ä ö ü werden diese auch normal ausgegeben
 (mit charset=iso-8859-1)
 
 aber bei manchen Mails kommt der Betreff gaaaaanz komisch an, z.B:
 
 =?UTF-8?Q?Test2_mit_zwei_Anh=C3=A4nge?= 
 heiist im Kalrtext: "Test2 mit zwei Anhänge"
 
 also auch ohne die Unterstriche zwischen den Worten !!!
 
 in einem WebMail (RoundCube) steht dieser Betreff aber richtig im Klartext
 also muss es ja gehen, diese codierung umzuwandeln ... aber wie ?!?
 
 ... ok, da steht was von UTF-8, also habe ich Ausgabe mit charset=utf-8 versucht
 aber Ergebnis bleibt genau das gleiche, keine Änderung in diesem Betreff
 aber die anderen Umlaute, die vorher gingen kommen dann als ? an
 
 könnt Ihr mir verraten, wie ich soooo komisch codierten String in Klartext bekomme?
 
 oder wie man gleich "sauber" codiert von imap abholenkann ?
 
 
 
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 
- 
    
    Hallo gamefun,
 
 was Du da hast nennt sich Q-Encoding und ist Bestandteil der MIME Spezifkation.
 Wenn Du auf einen Betreff triffst, der mit '=?' anfängt und mit '?=' aufhört, dann solltest Du das mit
 mb_decode_mimeheader()
 umwandeln können. Allerdings steht in den Kommentaren, dass die Funktion wohl manchmal nicht so gut funktioniert und man alternativ auch
 iconv_mime_decode()
 verwenden kann.
- 
    
    darkpandemic schrieb: 
 was Du da hast nennt sich Q-Encoding und ist Bestandteil der MIME Spezifkation
 
 vielen Dank, das hilft mir weiter :)
 
 habs jetzt so
 
 erstmal vorher: ... sicherstellen, das String in UTF-8 vorliegt
 header("Content-Type: text/html; charset=utf-8"); $betreffx = (string)$minfo->subject; if (!mb_detect_encoding($betreffx, 'UTF-8', true)) { $betreffx = iconv('iso-8859-1', 'UTF-8', $betreffx); }
 damit alle Umlaute richtig dargestellt werden
 ... ohne das wird sonst String der nicht in utf-8 ankommt falsch dargestellt
 die meisten kommen als ISO (bzw. ASCII) an, auch mit Umlauten (im Klartext)
 je nach Absender kommen manche auch mit "normal" UTF-8 an
 aber einige halt auch mit diesem "Q-Encoding" ... abhängig von Mail-Sender
 
 und ich will jetzt Ausgabe als UTF-8
 
 .. hier meine Tests / Ergebnisse
 
 ----------------------------------
 (a) ohne
 $betreff = $betreffx; echo "<br />".$betreff."\n";
 Ausgabe $betreff: (Q-Encoding)
 =?UTF-8?Q?Test2_mit_zwei_Anh=C3=A4nge?=
 
 ----------------------------------
 (b) mb_decode_mimeheader
 mb_internal_encoding('UTF-8'); $betreff = mb_decode_mimeheader($betreffx); echo "<br />".$betreff."\n";
 Ausgabe $betreff: (die Unterstriche bleiben)
 Test2_mit_zwei_Anhänge
 
 ----------------------------------
 (c) iconv_mime_decode
 $betreff = iconv_mime_decode($betreffx, 0, 'UTF-8'); echo "<br />".$betreff."\n";
 Ausgabe $betreff: (sieht gut aus)
 Test2 mit zwei Anhänge
 
 ----------------------------------
 (d) imap_mime_header_decode
 $betr_nfo = imap_mime_header_decode($betreffx); $betreff = $betr_nfo[0]->text;
 Ausgabe $betreff: (sieht auch gut aus)
 Test2 mit zwei Anhänge
 
 ----------------------------------
 
 
 also (c) geht wohl für alle header, und (d) ist halt speziell für imap_header
 
 zusammen mit dem Sicherstellen, das String in UTF-8 vorliegt
 klappt Variante (c) und (d) für mich .... bisher bei den ersten Tests
 
 +++++ DANKE @darkpandemic !!! +++++
 Dein Hinweis hat mir sehr geholfen :)
 
- 
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden! lima-city: Gratis werbefreier Webspace für deine eigene Homepage 
