Wieder einmal RegEx und URL-Links

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

  • Wieder einmal RegEx und URL-Links

    Mir ist bewusst, dass dieses Thema hier schon zu oft behandelt wurde, aber ich finde keine Lösung für mein Problem.

    Ich habe bereits versucht, verschiedene andere Lösungen umzubasteln, jedoch ohne Erfolg. Ich blicke bei den regulären Ausdrücken auch nicht wirklich durch, egal wie viele Tuts ich studiere.

    Es geht darum, eingegebene URLs in klickbare Links umzuwandeln. Jedoch soll die URL nicht als vollständige URL ausgegeben werden, sondern als [subdomain.]domain.tld

    Wichtig aber ist, dass ich für die Links keine Art Forencode verwenden möchte. Außerdem sollen ebenfalls übergebene Verzeichnisse, Dateinamen und Parameter nicht mit angezeigt werden.

    Beispiele (Eingabe => Ausgabe):

    http://domain.de => domain.de
    www.domain.com => domain.com
    www.subdom.domain.net => subdom.domain.net
    http://www.subdom.domain.org => subdom.domain.org
    www.domain.de/dir/dir/datei.php?a=b&c=d => domain.de

    Kann mir hier jemand helfen? Ich denke mal, dass es für viele von euch eine Kleinigkeit ist.

    ADco
    Zuletzt geändert von ADco; 20.05.2004, 13:39.

  • #2
    Man kann das ja folgendermassen versuchen, wobei ich weiss, dass es viel schöner mit reg.exp. gehen würde.
    Aber hier mal kurz ein Beispiel, wie ich es meine:

    PHP-Code:
    $string 'http://www.domain.de/dir/dir/datei.php?a=b&c=d ';

    $string ereg_replace('http://'''$string);
    $string ereg_replace('www.'''$string);

    $string explode('/'$string);

    echo 
    $string[0]; 
    EDIT:


    Mann kann es noch ein wenig kürzer fassen:
    und zwar mit parse url (ist mir gerade mal so eingefallen)
    PHP-Code:
    $url 'http://www.domain.de/1233/geheim.php';

    $url parse_url($url);
    $url eregi_replace('www.'''$url[host]);
    echo 
    $url



    HTH
    Zuletzt geändert von yozek; 20.05.2004, 17:16.

    Kommentar


    • #3
      Danke für die Antwort und entschuldige die lange Reaktion meinerseits.

      Leider ist es nicht das, was ich gesucht hatte. Ich habe nun die Lösung, die ich bisher hatte, ein wenig modifiziert und das Ergebnis ist halbwegs brauchbar. Jedoch leider nicht ganz.

      PHP-Code:
          $text eregi_replace("((ht|f)tp://www\.|www\.)([a-z0-9-]+(\.[a-z0-9-]+)
          *(\.[a-z]{2,3})((/|\?)[a-z0-9~#%&\\/'_\+=:\?\.-]*)*)"
      ,
          
      "http://www.\\3"$text);

          
      $text eregi_replace("((ht|f)tp://)((([a-z0-9-]+(\.[a-z0-9-]+)
          *(\.[a-z]{2,3}))|(([0-9]{1,3}\.){3}([0-9]{1,3})))((/|\?)[a-z0-9~#%&'_\+=:\?\.-]*)*)"
      ,
          
      "<a class=\"bA\" href=\"\\0\" target=\"\_blank\">\\1\\4</a> "$text); 
      Das Problem ist nun folgendes:

      Normale URL-Eingaben werden richtig angezeigt. Sind jedoch an die URL Parameter angehängt, funktioniert es nicht richtig. Angenommen, eine URL in der $text-Var lautet: http://blah.de/blah.php[COLOR=crimson]?x=1&y=2[/COLOR] dann werden die mit einem &-angehängten Parameter nicht mehr übergeben. Die Ausgabe sieht dann (mehr oder weniger) so aus:

      PHP-Code:
      <a href="http://blah.de/blah.php[B]?x=1&[/B]">http://blah.de</a> [B];y=2[/B] 
      Und so sollte es eigentlich aussehen:

      PHP-Code:
      <a href="http://blah.de/blah.php[B]?x=1&y=2[/B]">http://blah.de</a> 
      Nach dem & werde keine weiteren Parameter mehr übergeben. So wie ich das jedoch im RegEx sehe, müsste es doch stimmen

      Weiß jemand vielleicht, woran das liegt? Und, was noch wichtiger wäre, wie man es behebt?
      Zuletzt geändert von ADco; 12.06.2004, 16:43.

      Kommentar


      • #4
        schau mal, was yozek schreibt
        und zwar mit parse url (ist mir gerade mal so eingefallen)
        Mann kann es noch ein wenig kürzer fassen:
        frau kann es auch.
        OffTopic:
        damit erhält man sogar den anker, ... obwohl ich vor vier wochen noch behauptet hab, den anker mitzusenden wäre sinnlos ...
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Tut mir leid, aber ich bin scheinbar zu dumm, es zu verstehen

          Oder vielleicht hätte ich hinzufügen sollen, dass die gegebene Variable IRGENDEIN Text sein kann, in dem eine oder mehrere URL vorkommen können.

          $text="Also meinetwegen: Hallo, ich bin Rapunzel und habe einen krummen Rücken. Das hat mir mein Arzt gesagt. Informationen zum krummen Rücken findet ihr z.B. unter http://www.dr-kasperl.de/shower/show.php?kat=1&artikel=2&absatz=3 Ich hoffe, dass ihr keinen krummen Rücken bekommt."

          Und dieser Text wird dann durch 15 RegEx geschickt, die verschiedene Dinge mit diesem Text anstellen. Und einer von ihnen soll eben die URL im Text erkennen, verlinken und KÜRZEN, ohne den Link an sich zu verändern.

          Falls ihr aber meint, dass ich in den RegEx am Ende bei der Ausgabe mit parse_url arbeiten soll, dann muss ich euch sagen, dass ich das bisweilen nicht geschafft habe. Ich könnte mir höchstens das gesamte Array in die Ausgabe klatschen, was aber dazu führt, dass hier eben nur "Array" erscheint, ne.

          Bitte nochmals um genauere Erklärung, falls ihr noch immer der Meinung seid, dass es mir parse_url gehen muss.

          Kommentar

          Lädt...
          X