phpbar.de logo

Mailinglisten-Archive

[php] Umlautkodierung fuer mehrere Email-Empfaengeradressen

[php] Umlautkodierung fuer mehrere Email-Empfaengeradressen

Andreas Stagl a.stagl at gmx.at
Mit Mai 25 15:52:08 CEST 2005


Hallo nochmal,

Andreas Stagl schrieb:

> habe ein Problem beim Kodieren der Umlaute im "freidefinierbaren Teil" 
> (weiss nicht genau, wie ich's besser umschreiben soll) einer 
> Email-Adresse. Bzgl der Kodierung von Umlauten in der eigentlichen 
> Email-Adresse zerbrech ich mir dann später den Kopf.
>
> Generell kodiere ich Email-Header mittels md_encode_mimeheader()...
> [...]
> Das gewünschte Resultat wäre jedoch in etwa wie folgt:
>
> To: =?ISO-8859-15?Q?h=E4schen?= <haeschen at hasenbau.com>,
> =?ISO-8859-15?Q?h=FCndchen?= <huendchen at hundehuette.com>,
> mauserich <mauserich at einlochinderwand.com>, =?ISO-8859-15?Q?k=E4tz?=
> =?ISO-8859-15?Q?chen?= <kaetzchen at katzenkrob.com>,
> =?ISO-8859-15?Q?v=F6gelchen?= <voegelchen at nest.com>

... konnte das Problem inzwischen lösen, bin dabei allerdings auf ein 
unschönes Verhalten von mb_encode_mimeheader() gestossen.... und zwar 
kodiert mb_encode_mimeheader() erst ab dem ersten Wort, welches ein 
nicht-ASCII Zeichen enthällt, dann aber bis zum Ende des Strings. So 
macht die Funktion beispielsweise aus "mein kleiner grüner Kaktus" den 
String "mein kleiner =?ISO-8859-15?Q?gr=FCner=20kaktus?=". Mein 
Thunderbird kommt mit derart "halb-kodierten" Strings in From, To, etc 
Headern auch klar; für GMX, Squirrelmail & Co müsste man allerdings 
(sofern eine Kodierung nötig ist) den gesamten String (also bereits bei 
"mein" beginnend) kodieren. Dazu lässt sich mb_encode_mimeheader() 
allerdings nicht überreden.

Habs auch schon mit iconv_mime_encode() versucht. Dort wird zwar bereits 
(so wie's für GMX & Co nötig wäre) bereits ab dem ersten Wort kodiert, 
allerdings muss man dort für jeden Aufruf von iconv_mime_encode() als 
ersten Parameter den Header-Namen angeben, der dann im Erbebnis 
mit-verarbeitet wird und ich somit beim Verarbeiten von 5 
To-Email-Adressen in einer Schleife auch 5mal "To: " drinn stehen hätt, 
welches ich zwar über substr() oder eine ähnliche Funktion entfernen 
könnte, was mit dann aber 3 Zeichen abschneided und somit der 
Zeilenumbruch nicht mehr exact ist.

Kurzum.... wie ich in der Zwischenzeit gesehen hab, unterstützt ohnehin 
keiner der mir zugänglichen Webserver mbstring oder iconv, weshalb ich 
mich nun dazu durchgerungen hab die Kodierung direkt in PHP ohne externe 
Libaries zu machen. Deshalb meine Frage... kennt jemand von euch eine 
Klasse, die genau diese Kodierung macht, bzw wisst Ihr Resourcen, wo ich 
nachlesen kann, wie was zu kodieren ist? Im Moment genügt mir Q-Encoding.

Danke schon mal im Voraus!

Gruß aus Wien,
Andy


php::bar PHP Wiki   -   Listenarchive