URL aus BBCodes auslesen

Opmil

Grünschnabel
Hallo zusammen

Ich möchte aus einem BBCode, die URL auslesen.
BBCode sieht so aus:

www.irgendwas.com

Jetzt muss ich mittels PHP den Link zwischen den beiden BBcodes auslesen und das ganze in einem zweiten Schritt als html Link zusammenfügen. Würde dann natürlich so aussehen:

Code:
<a href="www.irgendwas.com" target="_blank">www.irgendwas.com</a>

Einfache Sachen, wie Bold oder Kursiv habe ich bereits mit einer str_replace-Funktion realisiert.
Ich denke dieses Problem könnte man mit der preg_match_all Funktion lösen. Nur habe ich keine Ahnung wie ich die Suchparameter setzten soll.

Ich hoffe es kann mir jemand helfen.

Besten Dank und Gruss
Opmil
 
PHP:
// URLs
$url_pattern[] = "#\[url\]((www)\.([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; // [ url]URL[ /url] without prefix
$url_replacement[] = "<a href=\"http://$1\">$1</a>";
$url_pattern[] = "#\[url\]([\w]+?://([\w\#$%&~/.\-;:=,?@\]+]+|\[(?!url=))*?)\[/url\]#is"; // [ url]URL[ /url] with http prefix
$url_replacement[] = "<a href=\"$1\">$1</a>";
$url_pattern[] = "#\[url=([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; // [ url=URL]desc[ /url] with http prefix
$url_replacement[] = "<a href=\"$1\">$2</a>";
$url_pattern[] = "#\[url=((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[/url\]#is"; // [ url=URL]desc[ /url] without prefix
$url_replacement[] = "<a href=\"http://$1\">$3</a>";
$text = preg_replace($url_pattern, $url_replacement, $text);

Kurz und bündig ;)
 
Ist übrigens aus dem phpBB geklaut, falls sich irgendwer wundern sollte...

Lieber gut geklaut, als schlecht kopiert ;)
 
Hehe, das dachte ich mir schon :-)
Hast du viellt auch noch gleich die umgekehrte Funktion? Also aus HTML wieder BBCode machen?

Gruss
Opmil
 
Zuletzt bearbeitet:
Nein, aber wofür brauchst du das?

Du solltest den BB Code erst bei der Ausgabe formatieren, damit eben beim nachträglichen Editieren u. ä. der User weiterhin bequem den BB Code nutzen kann, statt plötzlich HTML Code vor sich zu haben.
 
Hätte man auch gut ersetzen können beispiel so:

PHP:
    	$message = preg_replace("/\[url=(.*)\](.*)\[\/URL\]/isU", "<a href=\"$1\" target=\"_blank\">$2</a>", $message);
    	$message = preg_replace("/\[URL\](.*)\[\/URL\]/isU", "<a href=\"$1\" target=\"_blank\">$1</a>", $message);
 
Ist doch letzendlich das gleiche, nur dass du einen anderen regulären Ausdruck verwendest?
Benutze doch ebenfalls [phpf]preg_replace[/phpf]?
Nur dass dieser Ausdruck eben noch prüft, ob das "http://" gesetzt ist.
 
Hi,

ich habe ein Problem welches etwas komplizierter ist:

ich habe template dateien angelegt (html)

diese werden ausgelesen -> was ja nichts besonderes ist
jetzt wäre es ja müßig, wenn ich bei eine sprachauswahl jede seite mehrfach anlege (de, en, nl).

Deshalb habe ich mir language files angelegt, welche werte wie:
$lang[yes] = "Ja";
$lang[no] = "nein";
enthalten.

In den Templates habe ich {lang:yes} usw stehen, ersetze aber im php code alles einzeln
bsp: str_replace("{lang:yes}", $lang[yes], $inhalt);
wie kann ich das umgehen oder quasi ne automatische ersetzungs funktion schreiben?

danke schonmal im voraus
 
Zurück