link in Hyperlink umwandeln

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

  • link in Hyperlink umwandeln

    Hallo zusammen,

    ich versuche mich gerade an einem script, dass einfache links in einen Hyperlink umwandelt. Bestehende Hyperlinks sollen ignoriert werden.

    PHP-Code:
    $text="Der link <br><br><span style='border:1px solid;'>https://www.dasisteintest.de/test.pdf</span><br><br>wird in einen anklickbaren Hyperlink umgewandelt.";
    $text.="<br><br>Der link <br><br><span style='border:1px solid;'><a href='https://www.dasisteintest.de/test.pdf'>hier</a></span><br><br>muss nicht umgewandelt werden.";

    function 
    autolink ($input)
    {
    $text=preg_replace ("/\<.*?\>/i"," ",$input);
    preg_match("/https:\/\/www\.[^\s]*/i",$text,$a);
    $b='<a href="'.$a[0].'">'.$a[0].'</a>';
    $c str_ireplace($a[0], $b$input);
    return (
    $c);
    }
    echo 
    autolink ($text);​ 
    Momentan erhalte ich als Ergebnis:

    Code:
    Der link <br><br><span style="border:1px solid;"><a href="https://www.dasisteintest.de/test.pdf">https://www.dasisteintest.de/test.pdf</a></span>
    <br><br>wird in einen anklickbaren Hyperlink umgewandelt.<br><br>
    Der link <br><br><span style="border:1px solid;">
    <a href="<a href=&quot;https://www.dasisteintest.de/test.pdf&quot;>https://www.dasisteintest.de/test.pdf</a>">hier</a>
    </span><br><br>muss nicht umgewandelt werden.​
    Das Ergebnis soll aber wie folgt aussehen:

    Code:
    Der link <br><br><span style="border:1px solid;"><a href="https://www.dasisteintest.de/test.pdf">https://www.dasisteintest.de/test.pdf</a></span>
    <br><br>wird in einen anklickbaren Hyperlink umgewandelt.<br><br>
    Der link <br><br><span style="border:1px solid;">
    <a href="https://www.dasisteintest.de/test.pdf">hier</a>
    </span><br><br>muss nicht umgewandelt werden.​
    Wisst Ihr, wie ich das Problem lösen kann?

    Vielen Dank im voraus für Eure Hilfe

  • #2
    PHP-Code:
    <?php
    function makeLinksClickable($text) {
        
    $pattern '/(https?:\/\/[^\s]+)/i';
        
    $replacement '<a href="$1" target="_blank">$1</a>';
        return 
    preg_replace($pattern$replacement$text);
    }

    // Beispiel:
    $text="Der link <br>\n<span style='border:1px solid;'>https://www.dasisteintest.de/test.pdf</span>\n<br><br>wird in einen anklickbaren Hyperlink umgewandelt.\n";
    $text.="<br>Der link <br>\n<span style='border:1px solid;'><a href='https://www.dasisteintest.de/test.pdf'>hier</a></span>\n<br>muss nicht umgewandelt werden.";

    echo 
    makeLinksClickable($text);
    ?>

    Kommentar


    • #3
      Eine übliche Methode, dies in PHP zu lösen, besteht darin, URLs in einem Textstring automatisch zu erkennen und in HTML-Links umzuwandeln.

      Anstatt Links manuell einzufügen oder anzunehmen, dass jede Zeile eine URL ist, durchsuchen Sie den Text nach Mustern, die wie Internetadressen aussehen (zum Beispiel http:// oder https://). Dies wird normalerweise mit einem regulären Ausdruck (Regex) und preg_replace() durchgeführt.

      Die Idee ist einfach:​
      • Finde jede URL im Text
      • Erfasse sie
      • Ersetze sie durch ein <a href=""> HTML-Tag unter Verwendung derselben URL​
      Also ein einfacher Text wie:
      Check this website: https://example.com

      wird:
      Check this website: <a href="https://example.com">https://example.com</a>

      Diese Methode wird bevorzugt, weil sie innerhalb normaler Sätze funktioniert, nicht nur in isolierten Zeilen. Sie ist flexibler und wird häufig in Foren, Blogs und Content-Systemen verwendet, in denen Benutzer Rohtext mit Links einfügen.

      Kommentar


      • #4
        Danke für Eure Antworten und Tips. Ich habe mit meinen bescheidenen Programmierkenntnissen die Routine nun wie folgt komplett umgestellt:

        PHP-Code:
        $text="Der erste link <br><span style='border:1px solid;'><a href='https://www.eins.de/test1.pdf'>hier</a></span><br>muss nicht umgewandelt werden.";
        $text.="<br><br>Der zweite link <br><span style='border:1px solid;'><a href='https://www.zwei.de/test2.pdf.'>hier</a></span><br>muss nicht umgewandelt werden.";
        $text.='<br><br>Der dritte link <br><span style="border:1px solid;">https://www.drei.de,</span><br>wird in einen anklickbaren Hyperlink umgewandelt';
        $text.='<br><br>Der vierte link <br><span style="border:1px solid;"><a href="http://www.vier.de">hier</a></span><br>muss nicht umgewandelt werden.';
        $text.="<br><br>Der fuenfe link <br>\n<span style='border:1px solid;'>https://www.fuenf.de/test3.pdf;</span>\n<br>wird in einen anklickbaren Hyperlink umgewandelt.\n";
        $text.="<br><br>Der sechste link <br>\n<span style='border:1px solid;'><a href='https://www.sechs.de/test4.pdf'>hier</a></span>\n<br>muss nicht umgewandelt werden.";
        $text.='<br><br>Der siebte link <br><span style="border:1px solid;">https://www.sieben.de/test5.pdf</span><br><b>wird in einen anklickbaren Hyperlink umgewandelt</b>';
        $text.='<br><br>Der achte link <br><span style="border:1px solid;"><a href="https://www.acht.de.">hier</a></span><br>wird in einen anklickbaren Hyperlink umgewandelt';

        // Hier tritt ein Problem auf
        $text.='<br><br>Dieser link <br><span style="border:1px solid;">https://www.zwei.de/test2.pdf</span><br> existiert schon als Hyperlink Nr. zwei welcher daher fehlerhaft umgewandelt wurde.';

        function 
        autolink ($text)
        {
        $g=$text;
        $a=preg_replace ("/\<a href=[\'|"](.*?)[\'|"]\>.*?\<\/a\>/i","$1",$text);
        $b=preg_replace ("/\<.*?\>/i"," ",$a);
        preg_match_all("/https?:\/\/www\.[^\s]*/i",$b,$c);
        $d=count ($c[0]);
        if ($d>0)
        {
        $e=0;
        while ($e<$d)
        {
        $su=substr($c[0][$e],-1);
        $neu=$c[0][$e];
        $zs="";
        $h=array(".",",",";",":");
        $i=count($h);
        $j=0;
        while ($j<$i)
        {
        if ($su==$h[$j])
        {
        $neu=substr($c[0][$e],0,-1);
        $zs=$h[$j];
        break;
        }
        $j++;
        }
        $f='
        <a href="'.$neu.'">'.$neu.'</a>'.$zs;
        $g=str_ireplace($c[0][$e], $f, $a);
        $a=$g;
        $e++;
        }
        }
        return ($g);
        }

        echo autolink ($text);​ 

        1. Zuerst werden alls gefundenen Verlinkungen aus normalen Links und Verlinkungen gefiltert und im Array $c gesammelt
        2. Durch den Befehl str_ireplace wird ein normaler link in einen Hyperlink umgewandelt. Ein bestehender Hyperlink wird mit den gleichen Wert überschrieben und daher nicht veändert.
        3. Sollte es sich bei dem letzten Zeichen in einer Verlinkung um einen Punkt, Komma etc. handeln, ist dieser nicht Bestandteil des links sondern wird nach dem Hyperlink hinzugefügt. Aus
        Code:
        Klicken Sie die Seite https://www.test.de.
        wird
        Code:
        <a href="https://www.test.de</a>.
        Das ganze scheint soweit auch zu funktionieren. Ein Fehler tritt dann auf, wenn eine Verlinkung als normaler link und als Hyperlink auftritt (siehe letzten Eintrag von $text). Habt Ihr eine Idee, wie man das am besten lösen könnte Auch Verbesserungen sind herzlich willkommen ​

        Kommentar

        Lädt...
        X