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