email-Adressen konfertieren
Thomas
- php
Hi!
Ich würde gerne einen (nachträglichen) email-Schutz programmieren, der zw. Datenbank & Benutzerausgabe geschalten ist:
Es sollen links im Format '!<a href="mailto:(.*)">(.*)@(.*)</a>!U' in das Format '<a href="javascript:encrypt('[verarbeiteter string \1] ','');">\2<img src="img/at.gif" alt=" (AT) ">\3</a>' umwandeln.
Das müsste dann doch recht spamsicher sein, oder?
Stimmen die regulären Ausdrücke so & wie kann ich das in PHP realisieren?
DANKE!!
Thomas
(Hallo|Hi(ho)|Tag) Thomas,
Ich würde gerne einen (nachträglichen) email-Schutz programmieren, der zw. Datenbank & Benutzerausgabe geschalten ist:
Es sollen links im Format '!<a href="mailto:(.*)">(.*)@(.*)</a>!U' in das Format '<a href="javascript:encrypt('[verarbeiteter string \1] ','');">\2<img src="img/at.gif" alt=" (AT) ">\3</a>' umwandeln.
Mhmm, das ist aber nicht zwischen Datenbank und "Benutzerausgabe", sondern quasi hinter der HTML-Ausgabe.
In dem Fall müsste man im HTML-Quelltext verbotene Zeichen zusätzlich extra maskieren:
http://de.php.net/manual/de/function.htmlspecialchars.php
Ich würde nicht nach der HTML-Generierung im HTML-Quelltext Ersetzungen vornehmen, sondern aus der Adresse
den kompletten Link erzeugen und diesen dann im HTML-Quelltext einsetzen. Der Teil, der in
'[verarbeiteter String ...]' steckt muss vorher noch durch die htmlspecialchars()-Mangel (mit gesetztem
ENT_QUOTES).
Das müsste dann doch recht spamsicher sein, oder?
Hängt von deiner encrypt()-Funktion ab ... ;-)
Ein interessanter Ansatz zur Verschleierung der E-Mail-Adresse ist
auch hier zu finden:
http://www.1ngo.de/web/spam.html
Stimmen die regulären Ausdrücke so (...)?
Es ist sicher eine gute Idee, sicher erstmal anzuschauen, was alles in einer E-Mail-Adresse vorkommen darf,
und wie man das mit Regulären Ausdrücken prüft:
http://aktuell.de.selfhtml.org/artikel/programmiertechnik/email/index.htm
Es ist sinnvoll, vor dem Eintrag der Mail-Adress in die Datenbank eine Prüfung auf korrekte Syntax vorzunehmen.
Dann kannst du bei der Ausgabe des Textes einen vereinfachten RegEx benutzen. Ersetze einfach das letzte
vorkommende "@":
preg_replace('/\A(.*)@([^@]+)\z/', '$1' . $deine_ersetzung . '$2', $mail_addr_from_db);
Ich würde die Funktion in einem Testscript auf eine größere Zahl (möglichst echter) E-Mail-Adressen loslassen,
um zu prüfen, ob die Funktion feherfrei (oder besser fehlerarm?) arbeitet.
(...) wie kann ich das in PHP realisieren?
Entweder mit preg_replace() oder mit mehrfachem preg_match (Offset-Parameter nicht vergessen) und anschließendemSelbstzusammenbasteln des Ergebnisstrings aus den Teilen im Treffer-Array. B.T.W.: Das Treffer-Array von preg_match() kann beim Testen, ob auch die richtigen Teil-Strings gefunden werden, sehr hilfreich sein, wenn man es sich mit var_dump() oder print_r() ausgeben lässt.
MffG
EisFuX
P.S.: KON__V__ERTIEREN, KON__V__ERTIEREN, KON__V__ERTIEREN (*SCNR*)