Thomas: Link automatisch anklickbar machen

Hallo!

Ich möchte, dass in einem Url in einem Text automatisch in einen Link umgewandelt wird. Das wäre mit irgendeinem Codeschnipsel mit regulären Ausdrücken noch irgendwie hinzubekommen, auch wenn ich mich mit reg. Ausdrücken nicht auskenne. Aber ich möchte, dass bei Links zur eigenen Homepage der Url der Homepage nicht sichtbar ist.

Also aus
http://meine-homepage.de/verzeichnis

soll

<a href='http://meine-homepage.de/verzeichnis'>verzeichnis</a>

werden, aber aus

http://andere-homepage.de/test/
soll weiterhin
<a href='http://andere-homepage.de/test/'>http://andere-homepage.de/test/</a>

werden.

Wie mache ich das??

Vielen Dank für eure Hilfe!

  1. Grüße,

    Wie mache ich das??

    mit regulären ausdrucken wie du selbst shcon oben erwähnt hast - wo soll das problem liegen?

    MFG
    bleicher

    --
    __________________________-
    Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
    Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
    Boccaccio
    1. Grüße,

      Wie mache ich das??

      mit regulären ausdrucken wie du selbst shcon oben erwähnt hast - wo soll das problem liegen?

      MFG
      bleicher

      Das ich keine Ahnung von regulären Ausdrücken und im Internet nur Beispiele zu finden sind, die Links ersetzen, aber nicht noch eine Unterscheidung drin haben, ob es meine oder eine andere Homepage ist

      1. Grüße,

        Das ich keine Ahnung von regulären Ausdrücken und im Internet nur Beispiele zu finden sind, die Links ersetzen, aber nicht noch eine Unterscheidung drin haben, ob es meine oder eine andere Homepage ist

        nimm x-beliebiges besipiel, dupliziere und ergänze ein suchmuster mit http://www.deinepage..bla
        ich empfhele dir das handbuch bei php.net - ist recht verständlich.

        MFG
        bleicher

        --
        __________________________-
        Menschen an sich , sind nicht schlecht - es sind nur ihre Taten (c).
        Lieber bereuen gesündigt zu haben, als nicht sündigen und es später trotzdem bereuen.
        Boccaccio
        1. $text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
          href='http://$2$3'>$1$2$3</a>",$text);

          Dieser Code ersetzt alle Links, aber wie mache ich das jetzt mit der eigenen Homepage??

          1. Hello,

            $text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
            href='http://$2$3'>$1$2$3</a>",$text);

            Dieser Code ersetzt alle Links, aber wie mache ich das jetzt mit der eigenen Homepage??

            Das ist doch erst Stufe 3 :-)

            Das ganze also nochmal durchlaufen lassen für den angezeigten Text und den (variablen) String für Deine Homepage rausschmeißen lassen. Da der Link nach obiger Aktion normalisiert sein sollte (ich hab's  nicht überprüft), musst Du nur nach einem ganz einfachen (statischen) Muster suchen. Das kannst Du sogar mit str_replace() machen

            Alles klar?

            if ((strpos = ($link,$suchmuster) === 0))
            {
              $anzeigetext = str_replace($suchmuster,'',$link);
            }

            http://de.php.net/manual/de/function.strpos.php
            http://de.php.net/manual/de/function.str-replace.php

            Das mögen Andere anders sehen, aber ich würde, auch wenn es mit einer Monster-regular-Expression in einem Schritt ginge immer zwei oder drei draus machen.
            Man kann dann viel leichter nachvollziehen, was da passsiert und außerdem kann man die einfachen Zwisxchenschritte dann auch durch die wesentlich billigeren Stringfunktionen abarbeiten lassen.
            Warum immer gleich mit Kanonen auf Spatzen schießen?

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            1. So, jetzt klappts:

              $text=preg_replace("#(http://)?(www.)?([a-zA-Z0-9-./]+)#","<a
              href='http://$2$3'>$1$2$3</a>",$text);

              $text=preg_replace("#(<a
              href=')([a-zA-Z0-9-.:/]+)('>)(http://)?(www.)?(meine-homepage.de/)#","$1$2$3",$text);

              echo $text;

  2. Hello,

    Ich möchte, dass in einem Url in einem Text automatisch in einen Link umgewandelt wird. Das wäre mit irgendeinem Codeschnipsel mit regulären Ausdrücken noch irgendwie hinzubekommen, auch wenn ich mich mit reg. Ausdrücken nicht auskenne. Aber ich möchte, dass bei Links zur eigenen Homepage der Url der Homepage nicht sichtbar ist.

    Also aus
    http://meine-homepage.de/verzeichnis

    soll

    <a href='http://meine-homepage.de/verzeichnis'>verzeichnis</a>

    werden, aber aus

    http://andere-homepage.de/test/
    soll weiterhin
    <a href='http://andere-homepage.de/test/'>http://andere-homepage.de/test/</a>

    Das ist eigentlich eine interessante Übungsaufgabe.
    Ich würde das in mehreren Stufen machen.

    1. Stufe Link erkennen
    2. Stufe Link normalisieren
    3. Stufe Link anpassen und die Ausgabe zusammenbauen

    function get_urls($page)
    {
      $_urls = array();
      $_a = array();
      $newpage = '';
      //              1          2        3          4            <5>           6           7
      $pattern = '=^(.*?)(<area|<a|<img)(.*?)(href=|src=)"|'"|'(>.*$|>.*?</a>.*$)=msi';
      while(preg_match($pattern, $page, $_a))
      {
        if(count($_a)>1)
        {
          $page = $_a[7];
    ##      $newpage .= $_a[1].$_a[2].$_a[3].$_a[4].'"'.rewrite_url($_a[5]).'"'.$_a[6];
          $_urls[] = $_a[5];
        }
      }
      # return $newpage.$page;
      return $_urls;
    }

    Vielleicht hilft Dir die kleine Funktion dabei.
    Die sucht in einer Seite (also dem String $page) alle Hyperreferenzen heraus, die unter (1) in der Liste stehen.

    Harzliche Grüße vom Berg
    http://bergpost.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    1. Hello,

      eine weitre Funktion, als Beispiel wie man es machen könnte (?)

      function textfilter($text,$filter)
      {
        if (!is_array($filter))
        {
          $filter = explode(",",$filter);
        }

      if(in_array('email',$filter))$text = ereg_replace("mailto:[^<>[:space:]]+[[:alnum:]/]","<a href="\0">\0</a>", $text);
        if(in_array('http',$filter))$text  = ereg_replace("http://[^<>[:space:]]+[[:alnum:]/]","<a href="\0" target="_blank">\0</a>", $text);
        if(in_array('ftp',$filter))$text =  ereg_replace("ftp://[^<>[:space:]]+[[:alnum:]/]","<a href="\0">\0</a>", $text);

      return $text;
      }

      Wenn Du der Funktion den text und eine Liste mit den gewünschten Ersetzungen gibst

      • email
      • http
      • ftp

      Dann werden die ersetzt
      Die Funktion hat sich Fabian T. mal ausgedacht und sie lebt immer noch.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. So, hab jetzt nochmal versucht, selber ohne viele Kenntnisse was zusammenzubauen:

        $text=preg_replace("#(http://)?(www.)?(meine-homepage.de)?([a-zA-Z0-9-./]+)#","<a href='http://$2$3$4'>$1$2$4</a>",$text);

        $3 kann man dann ja einfach weg lassen, aber $1 und $2 müssten dann auch noch weg. Habe deshalb auch schon

        (http://www.meine-homepage.de|www.meine-homepage.de|http://meine-homepage.de|meine-homepage.de)

        aber so klappt es leider nicht, das www bzw. das http:// wird lieber als $1 oder $2 genommen!