Mail Empfänger / Betreff maskieren
Linuchs
- sonstiges
Hallo,
ich habe viele Adressen mit Gänsefüßen, z.B. Shanty-Chor "Die Landratten"
In meiner Liste bekomme ich die Mail-Adresse in dieser Form:
"Shanty-Chor "Die Landratten"" <mail@example.com>
Die Anzeige der versendeten Mails enzhält dann nur Shanty-Chor. Das reicht nicht.
Wie werden diese Zeichen bei einer Mail maskiert?
Gruß, Linuchs
Moin!
In meiner Liste bekomme ich die Mail-Adresse in dieser Form:
"Shanty-Chor "Die Landratten"" <mail@example.com>
Wie werden diese Zeichen bei einer Mail maskiert?
Bei mir geht:
$to='"Shanty-Chor \"Die Landratten\"" <mail@example.com>';
Jörg Reinholz
Hallo Jörg,
Bei mir geht:
$to='"Shanty-Chor \"Die Landratten\"" <mail@example.com>';
Mal schau'n. Also muss ich erstmal die Mail-Adresse vor der HTML-Wandlung "retten", mailcodieren und danach für die HTML-Liste HTMLcodieren:
$firma1_mailcode = addslashes( $row['mail'] );
$firma1_mailcode = htmlspecialchars( $firma1_mailcode );
foreach ( $row as $key => $val ) $row[$key] = quote2html( $val );
Ja, für den Spezialfall " geht das zufällig. Da die Eingaben aber von Usern kommen, muss ich auf alles gefasst sein, z.B. kommt so etwas aus der Datenbank:
Frankfurter „Shanty”'"Kalle"
Das setze ich ein als Wert firma1_mailcode
<a href='mailto:"[firma1_mailcode] VIP=[adr_id]" <[email]>'>
Im HTML Quellcde sieht's dann so aus:
<a href='mailto:"Karl-Heinz Osmer „Shanty”\'\"Kalle\" VIP=75" <osmer.kh@osmer.de>'>
HTML ignoriert aber die Maskierung ' und bricht die Ausgabe ab.
Also die eigentlich für Datenbanken gedachten Slashes sollen beim Mailprogramm wirken, müssen aber per HTML übermittelt werden.
Irgendwie blicke ich nicht durch.
Linuchs
habe das jetzt provisorisch so gelöst:
$firma1_mailcode = str_replace( "'", "-", $row['firma1'] );
$firma1_mailcode = addslashes( $firma1_mailcode ); // aus " mach \"
Das Hochkomma wie etwa bei O'Melly wird ein -
Moin,
Also muss ich erstmal die Mail-Adresse vor der HTML-Wandlung "retten", mailcodieren und danach für die HTML-Liste HTMLcodieren:
$firma1_mailcode = addslashes( $row['mail'] ); $firma1_mailcode = htmlspecialchars( $firma1_mailcode ); foreach ( $row as $key => $val ) $row[$key] = quote2html( $val );
Was hast du denn genau vor, also wo werden diese Mailadressen eingesetzt? Wenn es um den Kontextwechsel hin zum den Kopfzeilen einer Mail gibt, dann steht alles Relevante in RFC 5322.
Viele Grüße Robert
Moin!
Irgendwie blicke ich nicht durch.
Das ist doch einfach. Du musst Dich nur dumm stellen und stur "von innen nach außen" denken
"
durch \\"
im Name. Grund? Nächster Schritt:"
. Grund? Nächster Schritt:"
eingeschlossen. Dann verwende auch htmlentities($to, ENT_COMPAT)
um die "
in "
umzuwandeln.<?php
$name = 'Shanty-Chor "Die Landratten"';
$mail = 'foo@example.com';
$to = '"' . str_replace('"', '\"', $name) . '" <' . $mail . '>';
$link = '<a href="mailto:' . htmlspecialchars($to) . '">' . htmlentities($name). '</a>';
echo $link, "<br>\n";
$name = "anges d'amour";
$mail = 'bar@example.com';
$to = '"' . str_replace('"', '\"', $name) . '" <' . $mail . '>';
$link = '<a href="mailto:' . htmlentities($to, ENT_COMPAT) . '">' . htmlentities($name). '</a>';
echo $link, "<br>";
Ergebnis:
<a href="mailto:"Shanty-Chor \"Die Landratten\"" <foo@example.com>">Shanty-Chor "Die Landratten"</a><br>
<a href="mailto:"anges d'amour" <bar@example.com>">anges d'amour</a><br>
Mehr ist nicht zu tun.
Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset). Sonst geht's beim Umläuten daneben.
Jörg Reinholz
@@Jörg Reinholz
Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).
Es kann Gründe geben, genau das nicht zu tun.
Sonst geht's beim Umläuten daneben.
Nein. Wenn die Angabe der Zeichencodierung in der Ressource erfolgt (BOM oder meta
-Angabe[1]), dann geht beim Umläuten auch nichts daneben.
LLAP 🖖
nachträglich geändert, denn „Pragma-Direktive“ bezeichnet nur die meta
-Angaben mit http-equiv
/content
und umfasst nicht meta
-Angaben mit charset
↩︎
Moin!
@@Jörg Reinholz
Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).
Es kann Gründe geben, genau das nicht zu tun.
Ich übersetze den Leitsatz des Sachbearbeiters "Use character encoding declarations in HTTP headers if it makes sense, and if you are able, for any type of content, but in conjunction with an in-document declaration." durchaus von dem abweichend, was ich aus deinen Worten lese...
Jörg Reinholz
@@Jörg Reinholz
Tipp: Sende dem Browser ordentliche Header für die Kodierung (charset).
Es kann Gründe geben, genau das nicht zu tun.
Ich übersetze den Leitsatz des Sachbearbeiters "Use character encoding declarations in HTTP headers if it makes sense, and if you are able, for any type of content, but in conjunction with an in-document declaration." durchaus von dem abweichend, was ich aus deinen Worten lese...
?? Meinst du meine Übersetzung? „Verwenden Sie Angaben zur Zeichencodierung in HTTP-Headern für alle Inhaltstypen, für die das sinnvoll ist und für die Sie dazu in der Lage sind, aber in Verbindung mit einer Angabe im Dokument.“
Gründe gegen die Angabe im HTTP-Header sind etwas weiter unten genannt, wobei für mich Altlasten der Hauptgrund wären.
LLAP 🖖
Moin!
Gründe gegen die Angabe im HTTP-Header sind etwas weiter unten genannt, wobei für mich Altlasten der Hauptgrund wären.
Naja. Wenn ich mir die "Gründe" ansehe, dann treffen die für mich eher nicht zu.
Damit dürfte ich eher geringe Probleme haben.
Dto.
Nun ja. Kein Grund keine ordentlichen Header zu senden. Wenn ich z.B. Java-Skript mit Umlauten habe (und sei es in Kommentaren!) dann sind http-header wohl der einzige Weg die Kodierung zu übermitteln. Hinzu kommt: Wenn ich etwas mache, was auf CD's oder anderen Medien gespeichert werden soll, dann weiß ich das vorher.
Altlasten
/var/www/alt > find -name "*.html" -exec recode iso8859-15..utf-8 {} \;;
Jörg Reinholz
@@Jörg Reinholz
Naja. Wenn ich mir die "Gründe" ansehe, dann treffen die für mich eher nicht zu.
Auf mich eher auch nicht.
Der Artikel sagt ja auch nicht, dass man den Server keinesfalls die Codierung angeben lassen sollte – im Gegenteil.
Altlasten
/var/www/alt > find -name "*.html" -exec recode iso8859-15..utf-8 {} \;;
Das wäre auch eine Möglichkeit – für manche.
Andere wollen/können die Codierung von Altlasten möglicherweise nicht ändern. Und für genau die ist keine serverseitige Angabe der Codierung die Option, alt neben neu zu haben.
LLAP 🖖