Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

eMail Fehler bei ł und ähnlichen

6 views
Skip to first unread message

Jens Steinführer

unread,
Feb 19, 2011, 3:33:26 AM2/19/11
to
hallo,

seit geraumer Zeit beschäftigen mich die Umlaute beim Versand von
eMails per php mail Funktion. Ein Nutzer gibt seine Daten in einem
Formular ein. Diese werden anschließend auch richtig auf der Website
angezeigt. Die eMail enthält jedoch dann Fehler.

Ich benutze utf-8 per Header ( header('Content-Type: text/html;
charset=UTF-8'); )

Zuerst kamen die eMails mit kryptischen Zeichen an. Also denke ich,
dass der Server noch auf ISO läuft. Demnach setzte ich

iconv("UTF-8", "ISO-8859-1",$etext)

um dies zu bereinigen. Die eMails werden nun auch richtig "übersetzt",
aber nur, solange kein ł und ähnliches dabei ist. Dann schneidet php
an der Stelle, an der das erste Sonderzeichen kommt die eMail ab,
alles andere wird dann nicht mehr übertragen. Da der Text
Standardinformationen enthält, die deutsche Umlaute beinhalten, habe
ich eine kleine-große Herausforderung.

Hat jemand sich erfoglreich durch diese Thematik durcharbeiten können?

MfG
Jens Steinführer

Michael Fesser

unread,
Feb 19, 2011, 1:08:11 PM2/19/11
to
.oO(Jens Steinführer)

>seit geraumer Zeit beschäftigen mich die Umlaute beim Versand von
>eMails per php mail Funktion. Ein Nutzer gibt seine Daten in einem
>Formular ein. Diese werden anschließend auch richtig auf der Website
>angezeigt. Die eMail enthält jedoch dann Fehler.
>
>Ich benutze utf-8 per Header ( header('Content-Type: text/html;
>charset=UTF-8'); )

>[…]

Ist denn die E-Mail korrekt deklariert?

Micha

Jens Steinführer

unread,
Feb 20, 2011, 1:16:30 PM2/20/11
to
On 19 Feb., 19:08, Michael Fesser <neti...@gmx.de> wrote:
> Ist denn die E-Mail korrekt deklariert?

hallo, der momentane Stand ist jetzt:

// Spamquellen ausschalten
function stringsicherung ($str)
{
$str = str_replace("/*", "", $str);
$str = str_replace("BBC:", "", $str);
$str = str_replace("bbc:", "", $str);
$str = str_replace("Bbc:", "", $str);
$str = str_replace("bBc:", "", $str);
$str = str_replace("bbC:", "", $str);
$str = str_replace("BBC:", "", $str);
$str = str_replace("CC:", "", $str);
$str = str_replace("cC:", "", $str);
$str = str_replace("Cc:", "", $str);
$str = str_replace("cc:", "", $str);
$str = str_replace("\"", "", $str);
$str = str_replace("<", "", $str);
$str = str_replace(">", "", $str);
$str = str_replace(";", "", $str);
$str = str_replace(",", "&#130;", $str);
$str = str_replace("&lt;", "", $str);
$str = str_replace("&gt;", "", $str);
$str = str_replace("%0A", "", $str);
$str = str_replace("multipart/mixed", "", $str);
return $str;
}


// Mailfunction
function email($betreff = '', $text = '', $absender = '', $empfaenger
= '')
{ $betreff = stringsicherung ($betreff);
$empfaenger = stringsicherung ($empfaenger);
$betreff = stringsicherung ($betreff);
$absender = stringsicherung ($absender);
mail($empfaenger, $betreff, $text, "From: $absender ");
}


// Datei mit den Variablen für den Grundtext ($betreff + $variable1
(inkl. den Platzhaltern))
// Datei selbst ist im utf-8 Format abgespeichert
include($sver_email.'vorlage01.php');
// Versand der eMail
email($betreff, iconv("UTF-8", "ISO-8859-1",$variable1),
'ser...@domain.de', 'in...@domain.de');


Ich hatte eigentlich vor, den PHPMailer (http://phpmailer.worxware.com/
index.php) zu verwenden. Allerdings kommt dann bei solchen Zeichen gar
keine eMail an.. :(

MfG
Jens Steinführer

Thomas 'PointedEars' Lahn

unread,
Feb 20, 2011, 4:44:15 PM2/20/11
to
Jens Steinführer wrote:

> Michael Fesser <neti...@gmx.de> wrote:
>> Ist denn die E-Mail korrekt deklariert?
>
> hallo, der momentane Stand ist jetzt:
>
> // Spamquellen ausschalten
> function stringsicherung ($str)
> {
> $str = str_replace("/*", "", $str);
> […]

> $str = str_replace("multipart/mixed", "", $str);
> return $str;
> }
>
> // Mailfunction
> function email($betreff = '', $text = '', $absender = '', $empfaenger
> = '')
> { $betreff = stringsicherung ($betreff);
> $empfaenger = stringsicherung ($empfaenger);
> $betreff = stringsicherung ($betreff);
> $absender = stringsicherung ($absender);
> mail($empfaenger, $betreff, $text, "From: $absender ");
> }

OMG. Bitte installier einfach den Suhosin-Patch und spiel nicht mit E-Mail
(RFC 5322) herum, wenn Du Dich damit nicht auskennst (weshalb folgt
$absender ein Leerzeichen? Wo sind der `MIME-Version'-und `Content-Type'-
Header?). TIA.

> // Datei mit den Variablen für den Grundtext ($betreff + $variable1
> (inkl. den Platzhaltern))
> // Datei selbst ist im utf-8 Format abgespeichert
> include($sver_email.'vorlage01.php');
> // Versand der eMail
> email($betreff, iconv("UTF-8", "ISO-8859-1",$variable1),
> 'ser...@domain.de', 'in...@domain.de');

Das kann nicht zuverlässig funktionieren, da der Zeichensatz von ISO-8859-1
ein Subset des Unicode-Zeichensatzes ist (somit die mit ISO-8859-1
codierbaren Zeichen ein Subset der mit UTF-8 codierbaren Zeichen) und nicht
umgekehrt.

Die Folge ist, dass bei dem ersten Zeichen, das es in Unicode gibt aber
nicht in ISO-8859-1, der String durch iconv() *abgeschnitten* und eine
E_NOTICE erzeugt wird (da Du weder '//TRANSLIT' noch '//IGNORE' an
'ISO-8859-1' konkateniert hast):

<http://php.net/iconv>

In jedem Fall käme aber wohl nicht das heraus, was Du suchst.

> Ich hatte eigentlich vor, den PHPMailer (http://phpmailer.worxware.com/
> index.php) zu verwenden. Allerdings kommt dann bei solchen Zeichen gar
> keine eMail an.. :(

Mir fe lt bei Deinen Postings die kritische Fehler*analyse* (und die
Fehlerbeschreibung ist auch mager, um nicht zu sagen nicht existent).
*Weshalb* musst Du *scheinbar* für die E-Mail nach ISO-8859-1 konvertieren?
*Weshalb* kommen mit PHPMailer keine E-Mails an? Solange Du diese Fragen
nicht bearbeitet hast, brauchst Du an dieser Stelle nicht weiterzumachen.


PointedEars
--
Anyone who slaps a 'this page is best viewed with Browser X' label on
a Web page appears to be yearning for the bad old days, before the Web,
when you had very little chance of reading a document written on another
computer, another word processor, or another network. -- Tim Berners-Lee

Claus Reibenstein

unread,
Feb 20, 2011, 7:04:46 PM2/20/11
to
Jens Steinführer schrieb:

> $str = str_replace("BBC:", "", $str);
> $str = str_replace("bbc:", "", $str);
> $str = str_replace("Bbc:", "", $str);
> $str = str_replace("bBc:", "", $str);
> $str = str_replace("bbC:", "", $str);
> $str = str_replace("BBC:", "", $str);

Das geht einfacher:

$str = $str_ireplace("bbc:", "", $str);

Damit erschlägst Du auch die drei noch fehlenden Varianten und
vermeidest zusätzlich die doppelt vorhandene ;-)

Gruß. Claus

Stefan Froehlich

unread,
Feb 21, 2011, 1:56:57 AM2/21/11
to
On Mon, 21 Feb 2011 01:04:46 Claus Reibenstein wrote:
> > $str = str_replace("BBC:", "", $str);
> > $str = str_replace("bbc:", "", $str);
> > $str = str_replace("Bbc:", "", $str);
> > $str = str_replace("bBc:", "", $str);
> > $str = str_replace("bbC:", "", $str);
> > $str = str_replace("BBC:", "", $str);

> Das geht einfacher:
>
> $str = $str_ireplace("bbc:", "", $str);

> Damit erschlägst Du auch die drei noch fehlenden Varianten

Was soll "BBC" eigentlich fuer ein bedrohlicher Header sein...?

Servus,
Stefan

--
http://kontaktinser.at/ - die kostenlose Kontaktboerse fuer Oesterreich
Offizieller Erstbesucher(TM) von mmeike

Dein Traum vom Glück - Stefan: schlüpfen, welch beschmiertes Verlieben!
(Sloganizer)

Gerome Muent

unread,
Feb 21, 2011, 3:17:43 AM2/21/11
to
Jens Steinführer schrieb:

> Zuerst kamen die eMails mit kryptischen Zeichen an. Also denke ich,
> dass der Server noch auf ISO läuft. Demnach setzte ich
>
> iconv("UTF-8", "ISO-8859-1",$etext)
>
> um dies zu bereinigen. Die eMails werden nun auch richtig "übersetzt",
> aber nur, solange kein ł und ähnliches dabei ist.

Das l mit dem Strich durch ist nicht im Zeichensatz ISO-8859-1 drin und
kann deshalb nicht korrekt umgewandelt werden. Dt. Umlaute und
osteuropäische Sonderzeichen wie d mit Strich durch, l mit Strich durch,
z mit Spitze drauf etc. gemeinsam gibt es nur in einem
Unicode-Zeichensatz UTF8 oder UTF16.

Gruß, Bernd

--
BM Computer-Services Schwedenstr. 13
Webdesign 13357 Berlin
Internet Tel.: 030/20649400, mobil 0175/7419517
Layout
Grafik Web: http://www.bmservices.de
Programmierung eMail: kon...@bmservices.de

Jens Peter Möller

unread,
Feb 21, 2011, 7:15:31 AM2/21/11
to
Am 20.02.2011 19:16, schrieb Jens Steinführer:
> On 19 Feb., 19:08, Michael Fesser <neti...@gmx.de> wrote:
>> Ist denn die E-Mail korrekt deklariert?
>
> hallo, der momentane Stand ist jetzt:
>
> // Spamquellen ausschalten
> function stringsicherung ($str)
> {
> $str = str_replace("/*", "", $str);
> $str = str_replace("BBC:", "", $str);
> $str = str_replace("bbc:", "", $str);
> $str = str_replace("Bbc:", "", $str);
> $str = str_replace("bBc:", "", $str);
[..]

1. str_ireplace()
2. Die Suchausdrücke in ein Array.

>
> // Mailfunction
> function email($betreff = '', $text = '', $absender = '', $empfaenger
> = '')
> { $betreff = stringsicherung ($betreff);
> $empfaenger = stringsicherung ($empfaenger);
> $betreff = stringsicherung ($betreff);
> $absender = stringsicherung ($absender);
> mail($empfaenger, $betreff, $text, "From: $absender ");
> }
>
> // Datei mit den Variablen für den Grundtext ($betreff + $variable1
> (inkl. den Platzhaltern))
> // Datei selbst ist im utf-8 Format abgespeichert
> include($sver_email.'vorlage01.php');
> // Versand der eMail
> email($betreff, iconv("UTF-8", "ISO-8859-1",$variable1),
> 'ser...@domain.de', 'in...@domain.de');

Wie die anderen schon sagten, funktioniert die Konvertierung so nicht
immer. Ferner fehlen entsprechende Header für die Mail:

Mime-Version: 1.0
Content-Type: text/plain; charset="utf-8"
Content-Transfer-Encoding: 8bit

Den Zeichensatz anzugeben, ist hier das wichtigste.

Im übrigen kannst Du die Konvertierung komplett weglassen. Das Formular,
in dem der Mailtext eingegeben wird, ist ja schon UTF-8, ebenso Deine
Scripte. Also ist keine weitere Konvertierung notwendig.

Und das ganze Geraffel kannst Du dir sparen, wenn Du phpmailer,
PEAR::Mail, oder mail aus dem Zend Framework benutzt.


Gruß
JPM

Thomas 'PointedEars' Lahn

unread,
Feb 22, 2011, 7:37:14 PM2/22/11
to
Stefan Froehlich wrote:

> On Mon, 21 Feb 2011 01:04:46 Claus Reibenstein wrote:
>> > $str = str_replace("BBC:", "", $str);
>> > $str = str_replace("bbc:", "", $str);
>> > $str = str_replace("Bbc:", "", $str);
>> > $str = str_replace("bBc:", "", $str);
>> > $str = str_replace("bbC:", "", $str);
>> > $str = str_replace("BBC:", "", $str);
>
>> Das geht einfacher:
>>
>> $str = $str_ireplace("bbc:", "", $str);
>
>> Damit erschlägst Du auch die drei noch fehlenden Varianten
>
> Was soll "BBC" eigentlich fuer ein bedrohlicher Header sein...?

Damit wird bekanntermassen die E-Mail u.a. auf 3sat, Animal Planet, arte,
Comedy Central, EinsFestival, FOX, KI.KA, n-tv, National Geographic Wild,
ORF1, ORF2, PHOENIX, RTL Living, SAT.1 Comedy, TV Gusto, VOX, ZDF, zdf_neo
und ZDFtheaterkanal gesendet; je nachdem, wo sie thematisch gerade passt.
Der Headerfeldwert gibt die gewünschte Sendezeit oder den ShowView-Code der
Dokumentation an, in die die E-Mail eingebettet werden soll. Das versteht
heutzutage jeder regelmässig gepatchte MTA, siehe RFC 31337 vom 31. November
2010 (aktualisiert RFC 5322), Abschnitt 42.23.11.2 "Broadcast Destination
Header Fields".


Pointed"Du kannst Fragen stellen!"Ears
--
Andererseits wäre auf einer Seite unter vu-Domain mit Zappelgifs,
Mustertapete, MS Sans Comic und Frames ein fehlender Counter ein
glatter Stilbruch.
(Olaf Pöhlmann in dciwam <asl6a6$rm0$04$1...@news.t-online.com>)

0 new messages