hi,
da oft gefragt wird, wie man BB-Code's realisieren kann,
erkläre ich das hier mal mit den BB-Code's [b]Text[/b] und [url]http://phpfriend.de[/url]
Den BB-Code [b]Text[/b] kann man mit preg_replace() "übersetzen":
Erklärung zum Pattern-Teil von preg_replace:
[ und ] müssen jeweils mit einem Backslash \ markiert werden.
(.*) ist ein Platzhalter für einen undefinierten Text (wie % bei MySQL-Abfragen).
Die Pattern-Modifiers Uism:
U: Durch den U-Modifier wird PHP nicht versuchen, soviele Chars einzufangen wie nur möglich bis es kein mögliches Ende des Patterns mehr findet.
i: Es wird nicht zwischen GROSS- und klein-Buchstaben unterschieden
s: Dadurch kann man bei (.*)-Wildcards auch mit \r\n usw. arbeiten
m: Ohne m-Modifier würde es nur String-Anfang und -Ende geben. Diese werden über ^ bzw. $ angesprochen.
Im MultiLine-Mode erkennt PHP NewLines und erweitert damt die Wirkung von ^ und $ ..
Etwas schwieriger wird es, wenn man [URL]-Tags ersetzen will und dabei längere URL's gekürzt werden sollen,
dafür wird preg_replace_callback(), create_function(), strlen() und substr() benötigt.
preg_replace_callback() wird benötigt,
weil die URL für den Link-Titel verändert werden soll,
die Funktion ist ähnlich aufgebaut wie preg_replace().
Die Pattern-Modifiers sind schon bekannt vom ersten Beispiel,
neu ist hier, dass an zweiter Stelle eine Funktion benötigt wird,
die hier einfachheitshalber mit create_function() erstellt wurde.
$matches ist ein Array,
[0] ist der gesamte String des Callback's,
ab [1] kommen dann die Zeichen in den Klammern,
in diesem Fall ist also [1] http:// und [2] der unbekannte Text (.*).
Mit strlen() prüfen wir, ob der String mehr als 30 Zeichen enthält,
wenn dies der Fall ist, werden mit substr($matches[2],0,17) die ersten 17 Zeichen der URL ausgegeben und anschliessend mit substr($matches[2],-5) die letzten 5 Zeichen.
Wenn der String weniger als 30 Zeichen enthält wird die URL ungekürzt zurückgegeben, gesamter Code:
Falls man [php]-Tags benutzen will,
ist die Funktion highlight_string() hilfreich,
highlight_string() kann dann in Kombination mit preg_replace_callback() angewendet werden..
_______________________________
Alle Angaben ohne Gewähr
da oft gefragt wird, wie man BB-Code's realisieren kann,
erkläre ich das hier mal mit den BB-Code's [b]Text[/b] und [url]http://phpfriend.de[/url]
Den BB-Code [b]Text[/b] kann man mit preg_replace() "übersetzen":
Code:
$text = ("Ein fetter Text!"); $text = preg_replace("|\[b\](.*)\[/b\]|Uism","$1",$text);
[ und ] müssen jeweils mit einem Backslash \ markiert werden.
(.*) ist ein Platzhalter für einen undefinierten Text (wie % bei MySQL-Abfragen).
Die Pattern-Modifiers Uism:
U: Durch den U-Modifier wird PHP nicht versuchen, soviele Chars einzufangen wie nur möglich bis es kein mögliches Ende des Patterns mehr findet.
i: Es wird nicht zwischen GROSS- und klein-Buchstaben unterschieden
s: Dadurch kann man bei (.*)-Wildcards auch mit \r\n usw. arbeiten
m: Ohne m-Modifier würde es nur String-Anfang und -Ende geben. Diese werden über ^ bzw. $ angesprochen.
Im MultiLine-Mode erkennt PHP NewLines und erweitert damt die Wirkung von ^ und $ ..
Etwas schwieriger wird es, wenn man [URL]-Tags ersetzen will und dabei längere URL's gekürzt werden sollen,
dafür wird preg_replace_callback(), create_function(), strlen() und substr() benötigt.
preg_replace_callback() wird benötigt,
weil die URL für den Link-Titel verändert werden soll,
die Funktion ist ähnlich aufgebaut wie preg_replace().
Code:
$text = preg_replace_callback("||Uism","",$text);
neu ist hier, dass an zweiter Stelle eine Funktion benötigt wird,
die hier einfachheitshalber mit create_function() erstellt wurde.
Code:
$text = preg_replace_callback("||Uism",create_function('$matches',''),$text);
[0] ist der gesamte String des Callback's,
ab [1] kommen dann die Zeichen in den Klammern,
in diesem Fall ist also [1] http:// und [2] der unbekannte Text (.*).
Mit strlen() prüfen wir, ob der String mehr als 30 Zeichen enthält,
wenn dies der Fall ist, werden mit substr($matches[2],0,17) die ersten 17 Zeichen der URL ausgegeben und anschliessend mit substr($matches[2],-5) die letzten 5 Zeichen.
Code:
create_function( '$matches', 'if (strlen($matches[2]) > 30) { return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>"; } ')
Code:
$text = ("Die phpfriend.de-Tutorials: http://phpfriend.de/forum/viewforum....r30zeichensind"); $text = preg_replace_callback("|\[url\](http://)(.*)\[/url\]|Uism",create_function( '$matches', 'if (strlen($matches[2]) > 30) { return "<a href=\"http://".$matches[2]."\" target=_blank>http://".substr($matches[2],0,17)."[...]".substr($matches[2],-5)."</a>"; } else { return "<a href=\"http://".$matches[2]."\" target=_blank>http://".$matches[2]."</a>"; } '),$text);
ist die Funktion highlight_string() hilfreich,
highlight_string() kann dann in Kombination mit preg_replace_callback() angewendet werden..
_______________________________
Alle Angaben ohne Gewähr
Kommentar