Seite 1 von 1

Email-Adresse mit Betreff in Link umwandeln

Verfasst: 04.11.2005 15:10
von horscht
Hallo,

ich möchte eine Email-Adresse mit Betreff in einen Link umwandeln lassen.

standardmäßig wird z.B. dasisteintest@xyz.com umgewandelt
nicht aber dasisteintest@xyz.com?subject=bla bla

ich habe es mit dem Mod "erweiterter BBcode für email" versucht

aber das funktioniert leider auch nicht

ich hoffe deshalb auf eure Hilfe ;)

Verfasst: 04.11.2005 18:24
von Christian_W
Man müsste in der /includes/bbcode.php die Regulären Ausdrücke anpassen, damit sie auch das Fragezeichen und die folgenden Buchstaben erfassen.
Betroffen sind die folgenden beiden Zeilen:

Code: Alles auswählen

	$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
Bei der Zweiten Zeile muss vermutlich noch eine Templatedatei angepasst werden.

Code: Alles auswählen

	$patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";
Gruß Christian

PS: Nein, was genau geändert werden muss, weiß ich nicht.

Verfasst: 05.11.2005 15:11
von horscht
@Christian_W

dank dir weiß ich zumindest schon mal wo die Codeänderung stattfinden muss. ;)
leider weiß ich nicht, wie ich den Code anpassen muss, damit mein Anliegen umgesetzt wird.

vielleicht findet sich ja noch ein Codingfreak, der sich mit der Materie besser auskennt

Verfasst: 05.11.2005 16:39
von Christian_W
Ich hab mal ein wenig experimentiert. Email-Adressen die dierekt im Text stehen werden so umgewandelt. Der Betreff allerdings nur bis zum ersten Leerzeichen. Sonst kann nicht ermittelt werden wann der Link endet und der Text weitergeht.
Sinnvoller wäre daher wohl das [email]-Tag anzupassen.
Hier also mal die Änderung:

Code: Alles auswählen

----- öffne -----
/includes/bbcode.php

----- finde -----
	$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);

----- ersetze mit -----
	$ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)(\?)*([\w=]*)#i", "\\1<a href=\"mailto:\\2@\\3\\5\\6\">\\2@\\3\\5\\6</a>", $ret);
Hier noch meine Notizen (die außer mir wohl kaum einer versteht) ;)

Code: Alles auswählen

01.
===
#(^|[\n ])
# Begrenzung am Anfang
^ Anfang     doch nicht=> (hier wohl zum negieren verwendet)
| ODER? start of alternative branch
[\n ] Gruppe von verschiedenen möglichen Zeichen
\n Zeilenumbruch


02.
===
([a-z0-9&\-_.]+?)
[a-z0-9&\-_.]Kleinbuchstaben, Zahlen; und(&), Bindestrich, Unterstrich, Punkt
+ eins oder mehr der vorrangehenden Zeichen (innerhalb [] )
? unklar

02a.
====
@
@ Das Zeichen @

03.
===
([\w\-]+\.([\w\-\.]+\.)*[\w]+)
\w irgendein Buchstabe der in einem Wort vorkommen kann
\- der Bidestrich
+ eins oder mehr der vorrangehenden Zeichen (innerhalb [] )
\. der Punkt

[\w\-\.] Buchstaben, Bindestrich, Punkt
+ eins oder mehr der vorrangehenden Zeichen (innerhalb [] )
\. der Punkt
* keins oder mehr der vorrangehenden Zeichen innerhalb () 
[\w] irgendein Buchstabe
+ eins oder mehr der vorrangehenden Zeichen (innerhalb [] )

03.a
====
#i

# Begrenzung am Ende
i Groß und Kleinbuchstaben
Gruß Christian

Verfasst: 05.11.2005 17:08
von Christian_W
Hier noch das Ganze mit dem [email]-Tag:

Code: Alles auswählen

----- öffne -----
/includes/bbcode.php

----- finde -----
	$patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";

----- ersetze mit -----
	$patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+(\?)*([\w= \-]*))\[/email\]#si";
Gruß Christian

Verfasst: 05.11.2005 20:52
von horscht
super, danke dir - werde ich morgen mal austesten :D

Verfasst: 09.11.2005 00:26
von horscht
so nun habe ich mal Zeit zum Testen...

ich habe den Mod "erweiterter BBcode für email" installiert, da sieht die Struktur in der /includes/bbcode.php so aus:

Code: Alles auswählen

// [email]user@domain.tld[/email] code..
   $patterns[] = "#\[email\]([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";
   $replacements[] = $bbcode_tpl['email1'];
   
   // [email=user@domain.tld]username[/email] code..
    $patterns[] = "#\[email=([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\](.*?)\[/email\]#si";
    $replacements[] = $bbcode_tpl['email2'];
wie muss ich deinen Code verändern, damit es funktioniert?

Verfasst: 09.11.2005 09:55
von Christian_W
So sollte es gehen:

Code: Alles auswählen

----- öffne -----
/includes/bbcode.php

----- finde -----
	$patterns[] = "#\[email\]([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\[/email\]#si";

----- ersetze mit -----
	$patterns[] = "#\[email\]([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+(\?)*([\w= \-]*))\[/email\]#si";


----- finde -----
	$patterns[] = "#\[email=([a-z0-9\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+)\](.*?)\[/email\]#si";

----- ersetze mit -----
	$patterns[] = "#\[email=([a-z0-9&\-_.]+?@[\w\-]+\.([\w\-\.]+\.)?[\w]+(\?)*([\w= \-]*))\](.*?)\[/email\]#si";
Gruß Christian