BB Code - URL's umwandeln
Autor
Flitze
Klicks 174522
Keywords:
BB Code erklärt, [php]-Tags, [code]-Tags, [url]-Tags, HTML ersetzen, Text formatieren, Links umwandeln, URL's umwandeln, BBCode, PHP, URL
Klicks 174522
Rating für BB Code
8.6 von 10
Bewertungen187
Stand
11.06.2013
8.6 von 10
Bewertungen187
Keywords:
BB Code erklärt, [php]-Tags, [code]-Tags, [url]-Tags, HTML ersetzen, Text formatieren, Links umwandeln, URL's umwandeln, BBCode, PHP, URL
Breadcrumb:
Tutorials » BB Code » BB Code - URL's umwandeln
2. URL's umwandeln
[ADSENSE_LINE]Beispiele (das Leerzeichen muss natürlich entfernt werden):
mittels Tags
[ URL=http://www.mywebsolution.de]Klick mich![ /URL] => Klick mich!
direkte Umwandlung
w ww.mywebsolution.de => www.mywebsolution.de
h ttp://mywebsolution.de => http://mywebsolution.de
So sieht's als Code aus
PHP:
<?php
$text = preg_replace_callback("/\[url=(.*)\](.*)\[\/url\]/Usi", 'linkLenght', $text);
// "reine" URLs umwandeln
$text = preg_replace_callback('#(( |^)(((ftp|http|https|)://)|www.)\S+)#mi', 'linkLenght', $text);
?>
Also, ich fange mal bei der Umwandlung mittels Tags an. Dabei wird ein Hyperlink erzeugt, der als Ausgabenamen einen beliebigen Text haben kann. Das Suchmusterprinzip ist das gleiche wie zuvor, aber jetzt verwende ich nicht preg_replace sondern preg_replace_callback. Durch diese Funktion kann ich das gefundene Konstrukt noch bearbeiten. Das mache ich, weil sehr lange URL's unschön aussehen und ich diese durch eine Funktion kürzen will.
Beispiel
http://www.EinLangerLinkMitVielen.de?Parametern=1&Parametern=2§ion=news&id=23&dolor=murda&lorem=ipsumgsd
=>
http://www.EinLangerLinkMitVielen.de?Parametern=1&Parametern=2§ion=news&id=2...umgsd
Dazu brauche ich eine Funktion, die das gefundene Konstrukt überprüft und gegebenenfalls ändert. Dieser Funktion habe ich den Namen linkLenght gegeben. Sie sieht folgendermaßen aus
PHP:
<?php
// Prüft die Linklänge und passt sie gegebenenfalls an
// wird für preg_replace_callback definiert
function linkLenght($treffer)
{
// $treffer[1] ist die URL
$url = trim($treffer[1]);
if(substr($url,0,7)!= 'http://')
$url = "http://".$url;
// $treffer[2] ist der Ausgabename
// wurde kein Name angegeben, wird die URL als Name gewählt
if(strlen(trim($treffer[2]))!=0)
$linkname = $treffer[2];
else
$linkname = $treffer[1];
// legt eine maximale Länge von 50 Zeichen fest
// Ausnahme bei [img]-Tags
if(strlen($linkname)>50 AND !substr_count(strtolower($linkname), '[img]') AND !substr_count(strtolower($linkname), '[/img]'))
$linkname = substr($linkname, 0, 45-3)."...".substr($linkname, -5);
// Rückgabelink
$ergebnis = "<a href=\"".$url."\" target=\"_blank\">".$linkname."</a>";
return $ergebnis;
}
?>
Der Parameter $treffer ist ein Array, dessen Elemente den gefundenen Konstrukten entsprechen.
$treffer[0] entspricht also \\0 bzw. dem gesamten Konstrukt
$treffer[1] entspricht \\1 bzw. dem 1. Klammerpaar
$treffer[2] entspricht \\2 bzw. dem 2. Klammerpaar
...
Wie das String kürzen funktioniert, sollte verständlich sein, ansonsten schaut einfach nach den entsprechenden Funktionen im Manual. Was
PHP:
<?php
AND !substr_count(strtolower($linkname), '[img]') AND !substr_count(strtolower($linkname), '[/img]'))
?>
bedeutet, hängt mit den [ img]-Tags zum Einfügen von Bildern als Links zusammen. Wenn man nämlich folgenden Link als Bild erstellen will [ URL=www.mywebsolution.de][ IMG]http://www.mywebsolution.de/forum/pics/buttons/quote.gif [ /IMG][ /URL], dann wird die Adresse des Bildes als Anzeigename des Links erkannt. Dies Adresse hat mehr als 50 Zeichen und würde deshalb gekürzt werden, wodurch die Link-Adresse ungültig wird und das Bild nicht angezeigt werden kann. Deshalb muss diese kleine "Ausnahmeregel" formuliert werden.
Der Rückgabewert der Funktion ist der Ersatztext, durch den das Suchmuster ersetzt wird.
PHP:
<?php
$ergebnis = "<a href=\"".$url."\" target=\"_blank\">".$linkname."</a>";
return $ergebnis;
?>
Das direkte Umwandeln ist im Prinzip nichts anderes. Nur das Suchmuster ist etwas komplexer aufgebaut.
PHP:
<?php
// "reine" URLs umwandeln
"#( ( |^) (((ftp|http|https|)://)|www.) \S+ ) #mi"
/*| | | | |
| Zeilenanfang oder | Alle Nicht-Whitespaces |
| Leerzeichen | und min. 1 Zeichen |
Delimiter muss ftp:// oder http:// Delimiter
oder http:// oder www. enthalten und Modifier
*/
?>
Zurück zur vorigen Seite:
BB Code Weiter zur nächsten Seite:
BB Code - Wörter kürzen