You are not logged in.

  • Login

1

Tuesday, January 12th 2010, 8:54pm

UTF-8-Problem

Hallo,

für ein kleines Webmail-Projekt arbeite ich mit den imap-Funktionen von PHP. Soweit funktioniert auch alles prima, nur beim Betreff zerschießt mir PHP die Unlaute wie ö bspw. :/
Der Betreff ist die Variable $headerSubject und wird im Moment ohne weitere Verarbeitung 1:1 übernommen. Solange keine Umlaute vorkommen, funktioniert das auch alles einwandfrei.

PHP Quellcode

1
2
$msgHeader = imap_header($mail,$number);
$headerSubject = $msgHeader->subject;

Sobald aber bspw. ein "hö" im Betreff vorkommt, ist das Ergebnis bspw. folgendes:

Source code

1
=?utf-8?Q?h=C3=B6?=

Gibt es eine Möglichkeit, diese Umlaute entsprechend anzuzeigen bzw. umzuwandeln?

Danke!

2

Tuesday, January 12th 2010, 9:15pm

Wie ist denn das Ausgangsformat?

3

Tuesday, January 12th 2010, 9:25pm

Was meinst du mit 'Ausgangsformat'?

4

Tuesday, January 12th 2010, 10:03pm

Wenn du dich daran hälst gibst auch keine Probleme mit Umlauten:

Alle Dateien als utf8 ohne bom speichern. Bzw im Gewünschten Format iso unsw. Wichitg überall das selbe Format.
Html Datein den Header senden und auch im richtigen Format speichern (Datei)
header('content-type: text/html; charset=utf-8');

Datenbank:
Vor der ersten Sql abfrage Format einstellen.
mysql_query("SET NAMES 'utf8'");

Mfg Splasch

5

Tuesday, January 12th 2010, 10:57pm

Ich glaube wir reden aneinander vorbei. Der String $headerSubject beinhaltet '=?utf-8?Q?h=C3=B6?='. Die Lösung mit header() ist ja nur notwendig, wenn die HTML-Seite am Schluss unleserliche Zeichen ausgibt. Bei mir beinhaltet allerdings einfach die Variable den Zeichenmüll und den würde ich gerne zu leserlichen Zeichen machen.

6

Tuesday, January 12th 2010, 11:01pm

http://www.easy-coding.de/wiki/php/utf-8…herstellen.html
Arbeite den Wikiartikel mal durch. Ich bin sicher, dass du danach einen korrekten UTF8-String erhälst.

7

Tuesday, January 12th 2010, 11:35pm

Hatte auch mal was mit imap gebaut.

Versuche doch mal die spezielle imap_mime_header_decode() - Funktion da der Header der Mails mime-codiert sind, dannach sollte es eigentlich richtig dargestellt werden.
Hier der Link zu der Funktion: http://www.php.net/manual/de/function.im…ader-decode.php

8

Tuesday, January 12th 2010, 11:54pm

Okay, funktionert! :]
Bei der CronJob-Datei, die die E-Mails abruft, einfach oben den header() definieren (thx, splasch)...

PHP Quellcode

1
header('content-type: text/html; charset=utf-8');

...und dann $headerSubject folgendermaßen neu belegen (thx, exi).

PHP Quellcode

1
2
$headerSubjectTmp = imap_mime_header_decode($headerSubject);
$headerSubject = utf8_decode($headerSubjectTmp[0]->text);

Danke euch! :P

9

Wednesday, January 13th 2010, 11:33am

=?utf-8?Q?h=C3=B6?= ist kein Zeichenmüll! Das ist eine ordentliche MIME-Codierung deines Subjects hÜ.

Soweit ich weiß dürfen in den Header-Daten (dazu gehört der Betreff) nur ASCII-Zeichen stehen. Deshalb müssen andere Zeichen codiert werden. In deinem Fall sind UTF-8-Zeichen mit dem Encoding QuotedPrintable codiert worden: =?<charset>?<encoding>?<encoded-string>?=.

Siehe dazu: http://www.faqs.org/rfcs/rfc2047.html

Social bookmarks