links und email Adresse automatisch darstellen

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

  • links und email Adresse automatisch darstellen

    Hallo!

    Ich habe auf der Suche nach einer Möglichkeit Links und email Adressen
    auch gleich als solche in einem vom user geschriebenen Text sichtbar und
    natürlich funktionierend zu machen, auch wenn der user nur www. oder xyz@xyz.de eingibt.

    Folgenden Code habe ich mir dabei zusammen gesucht:


    PHP-Code:
     $comment=ereg_replace("(([^\.<>[:space:]]+\.)|([[:alpha:]]+://))
    +"
    "[^\.<>[:space:]]+\.[^<>[:space:]]+""<a href=\"http://\\0\" 
    target=\"_blank\">\\0</a>"
    $comment);

    $comment=ereg_replace("http://([[:alpha:]]+://)","\\1",$comment);

    $comment=ereg_replace('[_a-zA-z0-9\-]+(\.[_a-zA-z0-9\-]+)*\@'.'[_a-zA-
    z0-9\-]+(\.[a-zA-z]{1,3})+'
    '<a href="mailto:\\0">\\0</a>'$comment); 

    Grundsätzlich klappt das auch super, mit einer Ausnahme: Wenn man eine email Adresse mit einem "." im Namen hat, z.B. xyz.zus@xyz.de



    Dann erhalte ich in dem von mir zusammengebastelten Code folgende
    Ausgabe:

    xyz.zus@xyz.de" target="_blank">xyz.zus@xyz.de

    anstatt: xyz.zus@xyz.de

    Das muss irgendwie an der von mir gebauten Zusammenreihung der drei Elemente liegen, einzeln funktioniert die mail Ersatzfunktion ohne Probleme!

    Ich wäre dankbar, wenn mir jemand beim Verbessern meines Fehlers helfen könnte!

    Grüße!

    martin

  • #2
    Ähm ... verstehe ich nicht, funz doch
    PHP-Code:
    <?php
    $comment 
    'xyz.abc@abc.de';
    echo 
    '<br>'.$comment.'<br>';
    $comment=ereg_replace('[_a-zA-z0-9-]+(.[_a-zA-z0-9-]+)*@'.'[_a-zA-z0-9-]
    +(.[a-zA-z]{1,3})+'
    '<a href="mailto:\0">\0</a>'$comment);
    echo 
    '<br>'.htmlentities($comment).'<br>';
    ?>
    Output :
    xyz.abc@abc.de

    <a href="mailto:xyzabc@abc.de">xyz.abc@abc.de</a>

    Kommentar


    • #3
      Hallo!

      Also wenn ich die

      PHP-Code:
      $comment=ereg_replace('[_a-zA-z0-9-]+(.[_a-zA-z0-9-]+)*@'.'[_a-zA-
      z0-9-]+(.[a-zA-z]{1,3})+'
      '<a href="mailto:\0">\0</a>'$comment); 
      einzeln benutze geht es wunderbar, aber da hab ich ja nur den email
      check dann. Wenn ich die beiden Linkckecks vorher benutze und dann
      danach erst den mailcheck, dann bekomme ich die komische Ausgabe.



      Ich bin alles andere als ein php Genie und hab mir das Ganze folgendermaßen gedacht und zusammengebaut:

      PHP-Code:
      $comment "ein bestimmter Text, den ich nach mail Adressen und links
       durchsuchen möchte"


      $comment=ereg_replace("(([^.<>[:space:]]+.)|([[:alpha:]]+://))
      +"
      "[^.<>[:space:]]+.[^<>[:space:]]+""<a href=\"http://\0\" 
      target=\"_blank\">\0</a>"
      $comment);

      $comment=ereg_replace("http://([[:alpha:]]+://)","\1",$comment);

      $comment=ereg_replace('[_a-zA-z0-9-]+(.[_a-zA-z0-9-]+)*@'.'[_a-zA-
      z0-9-]+(.[a-zA-z]{1,3})+'
      '<a href="mailto:\0">\0</a>'$comment);


      echo 
      $comment
      .... 
      Ich dachte auf diese Weise kann ich den Text in drei Schritten durchsuchen
      einmal nach www. Links, einmal nach http://www. links
      und einmal nach emailaddis.

      Das Ganze mache ich nur mit der $comment Variablen, die immer den letzten Wert der letzten
      Durchsuchung erhält (mit den entsprechend ersetzten Eingaben)


      Wenn ich das aber so laufen lasse bekomme ich diese seltsame Ausgabe!


      Ich hoffe ich konnte einigermaßen erklären was mein Problem ergibt!

      Vielen Dank schon jetzt für alle Mühen!

      Grüße!

      martin

      Kommentar


      • #4
        Code:
        $comment=ereg_replace("(([^.<>[:space:]]+.)|([[:alpha:]]+://))
        +". "[^.<>[:space:]]+.[^<>[:space:]]+", "<a href=\"http://\" 
        target=\"_blank\"></a>", $comment);
        Ich habe mich jetzt nicht durch alle Einzelheiten des regulären Ausdrucks gewühlt, aber das Problem sollte folgendes sein:
        Im ersten replace sollen Web-Adressen in Links verwandelt, wie zum Beispiel domain.de oder eben dabei erkennt er aber xyz.xus@xyz.de auch als Adresse, du musst also irgendwie das @-Zeichen aus der Adresse ausschließen.

        Ansonsten wird nämlich die Email-Adresse zweimal umgewandelt.

        Kommentar


        • #5
          ich habe mir mal vor langer langer zeit folgende schnipsel besorgt, die reibungslos funktionierten. vielleicht helfen die:
          PHP-Code:
          // URLs erkennen und HTML formatieren
              
          $message eregi_replace('([[:space:]]|^)(www)''\\1http://\\2'$message);
              
          $prefix '(http|https|ftp|news)://';
              
          $pureUrl '([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)';
              
          $message eregi_replace($prefix $pureUrl"<a href=\"\\1://\\2\" target=\"_blank\">$text<u>\\1://\\2</u></a>"$message);
              
          // E-Mail erkennen und formatieren
              
          $message eregi_replace('([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)'"<a href=\"mailto:\\1\">$text<u>\\1</u></a>"$message); 
          gruss
          peter
          Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
          Meine Seite

          Kommentar


          • #6
            probier mal:
            PHP-Code:
            $comment ereg_replace('[_a-zA-z0-9-]+(\.[_a-zA-z0-9-]+)*@
            ([_a-zA-z0-9-]+\.)+[a-zA-z]{2,3}'
            '<a href="mailto:\0">\0</a>'$comment);
            $comment ereg_replace('[^@a-zA-z0-9]([_a-zA-z0-9-]+\.)+[a-zA-z]
            {2,3}'
            '<a href="http://\0" target="_blank">\0</a>'$comment); 
            EDIT:
            Hm.. Forum zeigt komisch an Mods was ist los?
            Zuletzt geändert von asp2php; 20.04.2004, 09:38.

            Kommentar


            • #7
              weil ich gerade ein ähnliches problem habe greife ich dieses thema noch einmal auf..


              Original geschrieben von Kropff

              PHP-Code:
              // URLs erkennen und HTML formatieren
                  
              $message eregi_replace('([[:space:]]|^)(www)''\\1http://\\2'$message);
                  
              $prefix '(http|https|ftp|news)://';
                  
              $pureUrl '([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)';
                  
              $message eregi_replace($prefix $pureUrl"<a href=\"\\1://\\2\" target=\"_blank\">$text<u>\\1://\\2</u></a>"$message);
                  
              // E-Mail erkennen und formatieren
                  
              $message eregi_replace('([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)'"<a href=\"mailto:\\1\">[COLOR=deeppink]$text[/COLOR] <u>\\1</u></a>"$message); 
              gruss
              peter

              meine frage: [COLOR=deeppink]$text[/COLOR] = ???



              lg, harry d.

              Kommentar


              • #8
                och.. wieso hilft mir denn keiner..

                danke, dass die frage schnell beantwortet wäre und mir würdet ihr dadurch einen grossen gefallen tun..

                suche jetzt schon die ganze zeit im forum, aber ich habe immer noch keine lösung gefunden mit mit regulären ausdrücken kenn ich mich auch noch nicht so gut aus, dass ich es mir selber machen könnte..


                also helft mir doch bitte..?!


                vielen dank!- lg, harry d.

                Kommentar


                • #9
                  Versuche mal ne Antwort zu geben, wenn es dir so danach verlangt:
                  $text= beliebiger Text deiner Wahl, der vor der Adresse im Linktext auftauchen soll

                  Kommentar


                  • #10
                    oh mann.. das es das gibt..! habe echt den wald vor lauter bäume nicht gesehen..! *schandeübermich*


                    trotzdem danke..


                    lg, harry d.

                    Kommentar


                    • #11
                      Guten Abend zusammen!

                      So nachdem ich mit Hilfe Eurer Tipps herumgebastelt habe habe ich es nun mit folgenden Zeilen hin bekommen:


                      PHP-Code:
                      // alle links und emailaddis klckbar machen
                       
                      $comment eregi_replace ("[[:alpha:]]+://www""www",$comment);
                       
                      $comment=ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/](\.[a-z0-9-]{2,4})+""<a href=\\0 target=_blank>\\0</a>"$comment);
                       
                      $comment=ereg_replace("www.[^<>[:space:]]+[[:alnum:]/](\.[a-z0-9-]{2,4})+""<a href=http://\\0 target=_blank>\\0</a>"$comment);
                       
                      $comment=ereg_replace("[_a-zA-z0-9\-]+(\.[_a-zA-z0-9\-]+)*\@[^<>[:space:]]+[[:alnum:]/](\.[a-z0-9-]{2,4})+""<a href=mailto:\\0 target=_blank>\\0</a>"$comment); 

                      Vielleicht hift es ja dem einen oder anderen weiter!

                      Alle Varianten:

                      www.xyz.de
                      http://www.xyz.de

                      xyz@xyz.de
                      xyz.abc@xyz.de


                      funktionieren perfekt! Auch mit Zahlen in Domain und emailaddi Namen.

                      einziger Ausnahmefall: Bei Links wenn das www groß geschrieben wird: WWW.xyz.de


                      Das kann man aber sicher auch noch ändern!


                      Vielen Dank an Euch für Eure Hilfe!

                      Grüße!

                      martin

                      Kommentar


                      • #12
                        Hallo,

                        ich habe diesen Thread jetzt eine Weile verfolgt und versucht, die Lösungen, die bei Euch funktionieren umzusetzen.
                        Leider klappt das bei mir irgendwie nicht. Der Vorschlag von [COLOR=darkblue]Kropff[/COLOR] ergibt bei mir:

                        [COLOR=blue]www.xxxxxx.de://[/COLOR].

                        Was mache ich falsch ??


                        PHP-Code:
                        <?php
                        $message 
                        "www.xxxxxx.de";
                        $text $message;
                        // URLs erkennen und HTML formatieren
                            
                        $message eregi_replace('([[:space:]]|^)(www)''\1http://\2'$message);
                            
                        $prefix '(http|https|ftp|news)://';
                            
                        $pureUrl '([[:alnum:]/\n+-=%&:_.~?]+[#[:alnum:]+]*)';
                            
                        $message eregi_replace($prefix $pureUrl"<a href=\"\1://\2\" target=\"_blank\">$text<u>\1://\2</u></a>"$message);
                        // E-Mail erkennen und formatieren
                            
                        $message eregi_replace('([0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-wyz][a-z](fo|g|l|m|mes|o|op|pa|ro|seum|t|u|v|z)?)'"<a href=\"mailto:\1\">[COLOR=deeppink]$text[/COLOR] <u>\1</u></a>"$message);

                        echo 
                        $message;
                        ?>

                        Kommentar


                        • #13
                          Hi!

                          Hast Du denn meine letzte Lösung mal versucht? Das war die einzige, die
                          bei mir ohne Probleme geklappt hat dann, hab ich aus allen Hilfen
                          zusammengestzt! Hat eben nur nicht mit großem WWW funktioniert, sonst
                          mit allem!

                          Grüße!

                          martin

                          Das mit der Lösung von Kropff hatte ich genauso, ich hab es auch nicht
                          hinbekommen und immer diese Kästchen erhalten!

                          Kommentar


                          • #14
                            ereg_replace und eregi_replace sind langsam, ich würde eher preg_replace empfehlen...


                            @martin:

                            Benutz mal bei deinem 2. Ausdurch eregi_replace, aber wie schon oben gesagt empfehl ich preg_replace
                            PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                            Kommentar


                            • #15
                              @martin.s

                              ich hab auch deine Lösung ausprobiert.
                              Leider bleibt die Ausgabeseite leer. Hab schon nach Schreibfehlern etc. bei
                              mir gesucht, aber nichts gefunden.

                              Kommentar

                              Lädt...
                              X