email adresse automatisch verlinken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • email adresse automatisch verlinken

    hallo,

    ich möchte aus einem bestimmten string alle emailadressen automatisch verlinken!
    wenn ich es so mache,

    $string = eregi_replace("[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})","<a href=\"mailto:\\0\">\\0</a>",$string);

    dann funktioniert es zwar (wobei z.B. von der emailadresse "email@adresse.jojo" folglich nur "email@adresse.joj" verlinkt wird, obwohl "email@adresse.jojo" keine gültige email ist und somit nicht verlinkt werden soll), wenn ich es jedoch so mache,

    $string = eregi_replace("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.([a-zA-Z]{2,3})$","<a href=\"mailto:\\0\">\\0</a>",$string);

    funktioniert es nicht mehr, obwohl ich doch nur mit "^" einen wortbeginn bzw. mit "$" ein wortende gekennzeichnet habe und somit das oben geschilderte problem aus dem weg geräumt habe!
    weiss jemand warum?

    vielen dank im voraus
    mfG
    Guido

  • #2
    Hi,

    nimm deine Zeichenkette und spalte sie anhand des Leerzeichens auf - jetzt kannst Du jedes einzelen Substring mit deinem regulären Ausdruck behandeln, du must lediglich noch ^ und $ am Anfang und Ende hinzufügen.

    Naja, dann mußt Du halt die einzelnen Teile wieder zusammenfügen...

    Gruß
    Thomas
    Gruß
    Thomas

    Kommentar


    • #3
      Dass mit ^ und $ kann im ersten Posting nicht funktionieren, weil sie sich auf den Beginn bzw. das Ende der Zeichenkette, nicht jedes einzelnen Wortes bezihen.

      Ne' andere Möglichkeit wäre es, preg_replace() zu verwenden. Dann kannst du nämlich auch die Angabe für eine Wortgrenze verwenden:

      $string = preg_replace("/[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]+\.[a-zA-Z]{2,3}\b/","<a href=\"mailto:\\0\">\\0</a>",$string);

      Kommentar


      • #4
        vielen dank, es funktioniert super:

        $string = preg_replace("/([A-Za-z0-9\.\-\_]{2,})(\@)([A-Za-z0-9\.\-\_]{3,})(\.)([A-Za-z]{2,3})\b/","<a href=\"mailto:\\0\">\\0</a>",$string);

        könntest du mir vielleicht erkären was die von mir fett markierten zeichen bedeuten/prüfen/bewirken?

        vielen dank im voraus!
        mfg
        guido

        Kommentar


        • #5
          mach ich doch gerne:

          Die beiden Schrägstriche am Anfang und Ende des Strings für das RegExp sind sog. Delimiter (krude übersetzt sowas wie "Begrenzerzeichen"). Deren einzige Aufgabe ist es, der preg_... Funktion zu zeigen, wo das RegExp anfängt und wo es aufhört. Kannst auch ein anderes (nicht alpha-numerisches) Zeichen nehmen und es anstelle der Schrägstriche einsetzen, z.B. die Tilde.

          Dieses Konstrukt hier \b zeigt dir bereits durch den Backslash (\) an, dass ein Sonderzeichen kommt. Es gibt mehrere vordefinierte Sonderzeichen, schau mal unter http://www.php.net/manual/en/pcre.pattern.syntax.php.
          Dieses \b steht für eine Wortgrenze. Somit trifft das RegExp nur dann zu, wenn die Email-Adresse von einer Wortgrenze gefolgt wird, also ein Leerzeichen, Punkt, Komma, weiß der Geier was noch.

          Ich hoffe, dass damit alle Klarheiten beseitigt sind

          Kommentar


          • #6
            alles klar, danke nochmal

            Kommentar

            Lädt...
            X