Forum BB Code Problem
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
auftauchen
code
eintrag
ersatz
falschen ansatz
feststelle
folgende methode
forum
grafisch darstellen
idee
machen
match
position
schleife
server
speiche
text
url
versucht code
-
Ich programmiere zurzeit ein Forum.
Für die BB Codes habe ich folgende Methode:
function bb_codes($bbcode) { $bbcode = htmlentities ( $bbcode ); /* Bold text */ $match ["b"] = "/\[b\](.*?)\[\/b\]/is"; $replace ["b"] = "<b>$1</b>"; /* Italics */ $match ["i"] = "/\[i\](.*?)\[\/i\]/is"; $replace ["i"] = "<i>$1</i>"; /* Underline */ $match ["u"] = "/\[u\](.*?)\[\/u\]/is"; $replace ["u"] = "<span style=\"text-decoration: underline\">$1</span>"; ... /* Parse */ $bbcode = preg_replace ( $match, $replace, $bbcode ); $bbcode = nl2br ( $bbcode ); $bbcode = preg_replace_callback ( "/\[code\](.*?)\[\/code\]/ism", "pre_special", $bbcode ); return $bbcode; } function pre_special($matches) { $prep = preg_replace ( "/\<br \/\>/", "", $matches [1] ); return "<pre><code>$prep</code></pre>"; }
Ich möchte nun noch, dass der Code außerhalb von [ code ] und [ /code ] mit wordwrap() behandelt wird. Das habe ich so versucht:
$bbcode = wordwrap($bbcode, 100, "<br />\n");
Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.
Wie könnte ich das lösen?
Beitrag zuletzt geändert: 7.1.2013 20:10:36 von php-oop -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
php-oop schrieb:
Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.
Wie könnte ich das lösen?
Hast du schon mal überlegt, ob du vielleicht den falschen Ansatz hast? Du möchtest etwas grafisch darstellen. Benutzt dazu aber php. Ich denke hier wäre aber html deine Lösung. Einfach mit nem <p> umschließen oder meinetwegen auch blockquote ^^ Den Text, nachdem der wordwrap passieren soll. -
mit strpos() kannst du nicht nur feststellen ob, sondern auch wo [code] & [/code] auftauchen.
du könntest zb deren positionen per schleife über den neuen eintrag in ein array speichen.
gibts keine, bist du fertig.
in einer 2. schleife über dieses array lässt sich wordwrap() dann auf den teil vom vorigen [/code] (bzw. 0) bis zum nächsten [code] anzuwenden und zwischen diesen tags nicht. nach dem letzen [/code] bis zum ende des eintrags noch ein letztes wordwrap(), voila. -
php-oop schrieb:
Ich programmiere zurzeit ein Forum.
Für die BB Codes habe ich folgende Methode:
function bb_codes($bbcode) { $bbcode = htmlentities ( $bbcode ); /* Bold text */ $match ["b"] = "/\[b\](.*?)\[\/b\]/is"; $replace ["b"] = "<b>$1</b>"; /* Italics */ $match ["i"] = "/\[i\](.*?)\[\/i\]/is"; $replace ["i"] = "<i>$1</i>"; /* Underline */ $match ["u"] = "/\[u\](.*?)\[\/u\]/is"; $replace ["u"] = "<span style=\"text-decoration: underline\">$1</span>"; ... /* Parse */ $bbcode = preg_replace ( $match, $replace, $bbcode ); $bbcode = nl2br ( $bbcode ); $bbcode = preg_replace_callback ( "/\[code\](.*?)\[\/code\]/ism", "pre_special", $bbcode ); return $bbcode; } function pre_special($matches) { $prep = preg_replace ( "/\<br \/\>/", "", $matches [1] ); return "<pre><code>$prep</code></pre>"; }
Ich möchte nun noch, dass der Code außerhalb von [ code ] und [ /code ] mit wordwrap() behandelt wird. Das habe ich so versucht:
$bbcode = wordwrap($bbcode, 100, "<br />\n");
Allerdings wird dann alles mit wordwrap() behandelt, aber der Code innerhalb des Code-Tags soll unbehandelt bleibenn.
Wie könnte ich das lösen?
Du weißt schon das du den Server extrem auslastest und das macht den Script langsamer!
Benutze für replace ein array, der Code wird somit schneller verarbeitet und lastet den server nicht so aus!
Beitrag zuletzt geändert: 16.1.2013 21:57:44 von hpage -
arrays zu verwenden halte ich für eine gute idee,
function BB($s) {# lässt sich leicht um img, code, italic usw. ergänzen # s:zu postender string, P:pattern=suchmuster, R:replacement=ersatz $P=array('\[b\](.*?)\[\/b\]\', '\[url\=(.*?)\](.*?)\[\/url\]\'); $R=array('<b>\\1</b>', '<a href="\\1">\\2</a>'); return preg_replace($P,$R,$s); }
oder so ähnlich. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage