Thomas: email-Adressen konfertieren

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

  1. (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*)