Nicole: URL PARSEN ALS LINK

Hallo erst mal ;-)

Ich suche ein Codeschnipsel oder Function,
die URL's in Texten erkennen kann und dann als
Link modifiziert.

Kennt jemand ein gutes Solches ?

Varianten im Text:

blahttp://www.xy.com/?s=2&d=3kommt vor dass hier kein leerzeichen

blahwww.xy.com/y.txtkommt vor dass hier kein leerzeichen

blahwww.sub.xy.com/y.txtkommt vor dass hier kein leerzeichen

blahwww.sub.xy.com/12345kommt vor dass hier kein leerzeichen

blahhttp://.sub.xy.com/12345kommt vor dass hier kein leerzeichen

Leider finde ich keinen Ansatz daraus alle Urls zu finden.
Und es gibt bestimmt noch mehr URL Möglichkeiten, leider.

Gruss Nikki

  1. Hi,

    Ich suche ein Codeschnipsel oder Function,
    die URL's in Texten erkennen kann und dann als
    Link modifiziert.

    mit regulären Ausdrücken kommst Du da weiter. Habe ähnliches auch erst vor kurzem gemacht, bin aber auf gewisse Grenzen gestossen:

    diese Funktion sollte Dir beim sucher bzw. ersetzen behilflich sein:
    http://www.php.net/manual/en/function.preg-replace-callback.php

    sie geht erst ab Version 4.0.5, wenn Du eine schlechtere hast gibt es einen Workaround mit modiefiern, die Du sowieso brauchst um die Leerzeichensachen und Gross-Klein-Schreibung wegzubekommen

    http://www.php.net/manual/en/pcre.pattern.modifiers.php

    reguläre Ausdrücke sind nicht ganz trivial, aber für sowas wie URL-suche gibt es einige im Netz, wenn nicht sogar im Beispiel auf php.net

    viel Spass

    ciao
    romy

    --
    DIE ROMY AUS L. AN DER P. SAGT DANKE UND AUF WIEDERSEHEN
    sh:( fo:| ch:? rl:( br:& va:| zu:) ss:| ls:[
    Die Erklärung zum Selfcode findest du hier: http://emmanuel.dammerer.at/selfcode.html
    Einen Decoder für den Selfcode findest du hier: http://peter.in-berlin.de/projekte/selfcode
    1. Dank Romy,
      allerdings geholfen hat's nicht.

      Klar habe ich schon mit regs probiert, aber
      nichts passendes gefunden. Zuviele Möglichkeiten.

      Gruss Nikki

  2. Moin!

    Ich suche ein Codeschnipsel oder Function,
    die URL's in Texten erkennen kann und dann als
    Link modifiziert.

    Kennt jemand ein gutes Solches ?

    Das Thema wurde in ein, zwei Threads hier bereits behandelt. Der resultierende reguläre Ausdruck ist nicht gerade klein, sowas entwickelt man nicht an einem Nachmittag.

    Da ich zu faul bin, die Threads im Archiv zu suchen, wirst du das selber machen müssen: http://selfsuche.teamone.de. Suchtipp: "Christian Kruse" war dran beteiligt. Und ich, wenn ich es richtig erinnere.

    - Sven Rautenberg

    --
    ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|
  3. Hallo, Nikki,

    ich habe mal verschiedene reguläre Ausdrücke, die im Netz kursieren, getestet und daraus ein eigenes Skript zum Verlinken von URLs erstellt.

    Es klappt in den meisten Fällen ganz gut, ist aber noch nicht perfekt. Du kannst es ja mal testen und anpassen/verbessern (den verbesserten Code bitte ggf. mir schicken).

    Grüße,

    Sebastian

    -------------------- schnipp --------------------

    // make links clickable
    // (C) sebastian.becker@berlin.de

    function makeClickable($str)
    {
    // merged from several sources
    // sebastian.becker@berlin.de

    // add http:// to www.
    $str = str_replace(' www.',' http://www.',$str);

    // pattern
    $pattern = '#(^|[^"=]{1})(http://|https://|ftp://|mailto:|news:)([^\s<>]+)([\s\n<>]|$)#sm';

    // add <a href=""></a> to links, but not in <a></a>
    $str = preg_replace($pattern,"\1<a href="\2\3" target="_blank">\3</a>\4", $str);

    // replace mail addresses
    $str = eregi_replace("(([a-z0-9-.]+)@([a-z0-9-.]+).([a-z0-9]+))","<a href="mailto:\0">\0</a>",$str);

    return $str;
    }

    echo makeClickable("Die Domains www.google.com und www.google.de (beide ohne http://) sollten eigentlich <a href="http://www.google.de" target="_blank">www.google.de</a> (im Ursprungstext bereits verlinkt) und http://www.google.de (im Ursprungstext beide mit http://) geschrieben werden.<br><br>Post bitte an info@google.com<br><br>www, www., ftp., mailto:");

    ?>

    1. Hallo Sebastian,
      das hilft mir schon ein weiter, danke ;-)

      Eine Frage noch:
      Warum machst du die Leerzeichen ?

      $str = str_replace(' www.',' http://www.',$str);

      Eins meiner Probleme war, dass Leute ohne Leerzeichen weiter
      geschrieben haben.

      Deshalb:
      $str = str_replace('www.','http://www.',$str);

      oder ergeben sich dann andere Nachteile ?

      Gruss Nikki

      ps. An Sven:
      Ich habs gefunden, allerdings gibts da parse error.

      Weiss auch nicht wirklich was das ist :
      my @links = ();
      push @links,[$1, $2];

      1. Hallo, Nikki,

        Warum machst du die Leerzeichen ?

        $str = str_replace(' www.',' http://www.',$str);

        kann ich jetzt auch nicht mehr so genau sagen, auf den ersten Blick macht es nicht so viel Sinn. Evtl. mußt Du es so schreiben ...

        $str = str_replace('www.','http://www.',$str);
        $str = str_replace('http://http://','http://',$str);

        Wie gesagt, das Skript ist noch nicht perfekt und macht z.B. - glaube ich - auch aus einem "http" im fortlaufenden Text einen Link ohne Inhalt. Möglicherweise muß man für solche Fälle eine eigene Subroutine vorsehen.

        Besser wäre natürlich eine Optimierung der regulären Ausdrücke - aber die habe ich auch nur "geklaut", d.h. ich durchschaue sie nicht so richtig.

        Für alle Verbesserungsvorschläge bin ich weiterhin dankbar ...

        Grüße,

        Sebastian

      2. Moin!

        ps. An Sven:
        Ich habs gefunden, allerdings gibts da parse error.

        Weiss auch nicht wirklich was das ist :
        my @links = ();
        push @links,[$1, $2];

        Das ist Perl. Sollte in der Themenangabe eigentlich drüberstehen. :)

        - Sven Rautenberg

        --
        ss:) zu:) ls:[ fo:} de:] va:) ch:] sh:) n4:# rl:| br:< js:| ie:( fl:( mo:|