Mailinglisten-Archive |
Hallo Thomas,
Am Montag, 21. August 2006 17:13 schrieb Thomas Winter:
> ich decodieren mit mb_decode_mimeheader einen String mit Umlauten.
>
> mb_decode_mimeheader(strtoupper($val->subject))
Punkt 1: Wenn, dann solltest Du hier mb_strtoupper() verwenden! :-)
> Es klappt leider nicht, es wird nur Unsinn angezeigt (Apache UTF-8).
> Ich meine ich hätte es mit PHP4 schon einmal genau so gemacht, nur
> habe ich jetzt PHP5.
>
> So sieht der Originalstring aus: Test =?iso-8859-15?b?5Pb8xNbc?= Test
Es scheinen hier zwei Probleme vorzuliegen.
1. Es sieht nach einem Zeichensatzproblem aus: Apache UTF-8 und Text
ISO-8859-15. Deine Testzeichenkette ist in Ordnung. Bei mir ergeben
folgende Zeilen
header('Content-Type: text/html; charset=ISO-8859-15');
mb_internal_encoding('ISO-8859-15');
echo(mb_decode_mimeheader('=?iso-8859-15?b?5Pb8xNbc?='));
dieses Ergebnis:
äöüÄÖÜ
2. Es steht zwar im Handbuch, "Using quoted-printable-encoding the
hex-numbers must be written in uppercase letters!", das trifft jedoch
hier nicht zu. Erweitert man den Code unter 1. wie folgt um
mb_strtoupper(),
header('Content-Type: text/html; charset=ISO-8859-15');
mb_internal_encoding('ISO-8859-15');
echo(mb_decode_mimeheader(mb_strtoupper('=?iso-8859-15?b?5Pb8xNbc?=')));
dann kommt folgendes heraus:
äð|\ÐB
Die Ausgabe unter 1. scheint mir die gewünschte zu sein. Daher mein Tip:
1. Den Zeichensatz für die Seite explizit mitzugeben.
2. Den Zeichensatz für die mb-Operationen explizit setzen.
3. Sollten die Zeichensätze unter 1. und 2. unterschiedlich sein,
mb_convert_encoding zur Umwandlung der Zeichenkette verwenden.
4. (mb_)strtoupper weglassen.
Viele Grüße
Lutz
php::bar PHP Wiki - Listenarchive