phpbar.de logo

Mailinglisten-Archive

[php] mb_decode_mimeheader geht nicht?

[php] mb_decode_mimeheader geht nicht?

Lutz Zetzsche Lutz.Zetzsche at sea-rescue.de
Die Aug 22 06:16:00 CEST 2006


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