• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

[PHP] Regex Problem mit URL

dertypdernixkan

New member
Abend

Jemand hier der sich mit Regex auskennt?

Es geht um folgendes: ich habe eine Funktion die URLs erkennen und entsprechen als Link ausgeben soll solange es sich dabei nicht um ein iframe oder javascript handelt.

Die Funktion soll später, bzw. macht sie das jetzt schon, Bilder und Video-URLs erkennen, funktioniert auch. Nur ist mir jetzt aufgefallen, dass wenn eine URL zweimal von derselben Domain vorkommt, zerhaut es die Links. Und ich finde den Fehler nicht!

Hier mal das wichtigste der Funktion

PHP:
<?php

function findUrl($str) {

    $backlink = "";
    $url = preg_match_all('@(?<![.*">])\b(?:(?:http|https|ftp|ftps)://|[a-z]\.)([-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$])@i', $str, $match);
	
    for ($i = 0; $i < $url; $i++) {

        $backlink = '<a class="extern" href="'.$match[0][$i].'">'.$match[0][$i].'</a>';
        $str = str_ireplace($match[0][$i], $backlink, $str);

    }

    return $str;

}

#$str = 'https://www.facebook.com/ https://www.facebook.com/irgendwer';        // erster Link ginge, der zweite sähe so aus <a href="https://www.facebook.com/">https://www.facebook.com/</a>irgendwer
#$str = 'http://www.meineseite.tld/ http://www.meineseite.tld/irgendwer';           // selbes Spiel wie bei den FB-Adressen
#$str = 'https://www.facebook.com/irgendwer http://www.meineseite.tld/irgendwer'; // dieses jedoch gibt einen Link zu FB als auch einen zu meineseite.tld aus


// der Aufrufecho

findUrl($str);

Kann mir da jemand weiterhelfen?
 
Zuletzt bearbeitet von einem Moderator:
Auf der Seite Online regex tester and debugger: JavaScript, Python, PHP, and PCRE kannst du deinen Regex mit beliebigen Strings testen und verfeinern. Rechts werden Erklärungen angezeigt. Im übrigen würde ich solche Dinge nicht mit eigenem Code machen sondern auf bestehende Prozeduren/Libs zurückgreifen, die schon millionenfach getestet wurden. Das Netz ist übrigens voll mit Lösungen für die Suche "php links extrahieren". Das dritte Ergebnis ist ein Stack Artikel der mir ganz sinnvoll aussieht.
 
Ein preg_match mit einem "normalen" str_replace wird hier nie funktionieren. Was du machen willst, kannst du mit preg_replace() realisieren.
 
Zurück
Oben