BBCODE in HTML

Sasser

Erfahrenes Mitglied
Guten Abend!

Ich nutze eine Funktion, um BB-Code wieder in HTML umzuwandeln.

Wenn man den Text hintereinanderweg schreibt, funktioniert es auch.

Wenn man allerdings z.B. zwischen den Tags einen Zeilenumbruch macht, werden beide Tags nicht mehr umgewandelt und einfach ausgegeben.

PHP:
function bbcodes($string, $maximagesize) {
	$string = preg_replace ( '/\[ALIGN=(.*?)\](.*?)\[\/ALIGN\]/', '<div style="text-align:$1;">$2</div>', $string );
	$string = preg_replace ( '/\[IMG\](.*?)\[\/IMG\]/e', 'imagewidth("$1","$maximagesize")', $string );
	$string = preg_replace ( '/\[URL=(.*?)\](.*?)\[\/URL\]/', '<a href="$1" target="_blank">$2</a>', $string );
	$string = preg_replace ( '/\[SIZE=(.*?)\](.*?)\[\/SIZE\]/', '<span style="font-size:$1pt;">$2</span>', $string );
	$string = preg_replace ( '/\[COLOR=(.*?)\](.*?)\[\/COLOR\]/', '<font color="$1">$2</font>', $string );
	$string = preg_replace ( '/\[B\](.*?)\[\/B\]/', '<b>$1</b>', $string );
	$string = preg_replace ( '/\[U\](.*?)\[\/U\]/', '<u>$1</u>', $string );
	$string = preg_replace ( '/\[I\](.*?)\[\/I\]/', '<i>$1</i>', $string );
	return $string;
}
 
Scheinbar nicht mit Zeileumbruch.
Tutorials sind meistens Anleitungen und Gedankliche Ideen. Meistens muss man das Resultat aber noch seinen Bedürfnissen anpassen.
 
OK, aber "m" ist nicht der richtige Parameter, sondern "s".

So scheint es jedenfalls auf den ersten Moment zu funktionieren:

PHP:
function bbcodes($string, $maximagesize) {
	$string = preg_replace ( '/\[ALIGN=(.*?)\](.*?)\[\/ALIGN\]/s', '<div style="text-align:$1;">$2</div>', $string );
	$string = preg_replace ( '/\[IMG\](.*?)\[\/IMG\]/s', 'imagewidth("$1","$maximagesize")', $string );
	$string = preg_replace ( '/\[URL=(.*?)\](.*?)\[\/URL\]/s', '<a href="$1" target="_blank">$2</a>', $string );
	$string = preg_replace ( '/\[SIZE=(.*?)\](.*?)\[\/SIZE\]/s', '<span style="font-size:$1pt;">$2</span>', $string );
	$string = preg_replace ( '/\[COLOR=(.*?)\](.*?)\[\/COLOR\]/s', '<font color="$1">$2</font>', $string );
	$string = preg_replace ( '/\[B\](.*?)\[\/B\]/s', '<b>$1</b>', $string );
	$string = preg_replace ( '/\[U\](.*?)\[\/U\]/s', '<u>$1</u>', $string );
	$string = preg_replace ( '/\[I\](.*?)\[\/I\]/s', '<i>$1</i>', $string );
	return $string;
}
 
Zuletzt bearbeitet:
tag zusammen,

ich habe mir hier nun alles durchgelesen und stehe leider vor einem problem.
habe den code für die bbcodes in meine datei eingefügt, aber leider funktioniert sie noch nicht zusammen mit meiner datei.

bei mir ist das problem, dass ich den text aus der db hole.

PHP:
 while ($ausgabe = mysql_fetch_array ($result))
 {

 $text1 = nl2br ("<div id=\"content_title\">$ausgabe[topic_title]</div><div id=\"content_text\">$ausgabe[post_text]</div><div id=\"content_autor\">Autor: $ausgabe[topic_first_poster_name]<div id=\"content_link\"><a href=\"forum/viewtopic.php?f=2&t=".$ausgabe[topic_id]."\">zum Thema</a></div></div>");

 $formatiert = bbcode( $text1 );

 echo $formatiert;
 }

habe das mal mit nem fixen text probiert, dabei funktionierts. habe das gefühl, dass er nicht den wert aus der datenbank überprüft, sondern den direkten wert "nl2br ("div..." usw.

nun die frage wie bekomm ich das teil zum laufen?^^

würde mich über hilfe freuen. =)


MfG

Sahe
 
Da du keine Testdaten mitlieferst.....
mach mal echo $text1; und dann können wir mal prüfen warum es nicht geht.
 
hi,

öhm weiß jetzt nit so ganz was du meinst, also wenn ich echo $text1; mache liefert er ganz normal die sachen aus der db.
hier mal nen link zu der seite, die news, die in der mitte stehn werden aus der db geholt.

http://gerchaos.cwsurf.de/

ganz unten sieht man, dass er das bild versucht in bbcode, anstatt in html auszugeben.
 
kann mir denn niemand helfen?

hier nochmal mein ganzer code:

PHP:
<?php

function bbcode( $bb )
 {
    $bb = preg_replace ( '/\[align=(.*?)\](.*?)\[\/align\]/', '<div style="text-align:$1;">$2</div>', $bb );
    $bb = preg_replace ( '/\[img\](.*?)\[\/img\]/', '<img src="$1">', $bb );
    $bb = preg_replace ( '/\[url=(.*?)\](.*?)\[\/url\]/', '<a href="$1" target="_blank">$2</a>', $bb );
    $bb = preg_replace ( '/\[size=(.*?)\](.*?)\[\/size\]/', '<span style="font-size:$1pt;">$2</span>', $bb );
    $bb = preg_replace ( '/\[color=(.*?)\](.*?)\[\/color\]/', '<font color="$1">$2</font>', $bb );
    $bb = preg_replace ( '/\[b\](.*?)\[\/b\]/', '<b>$1</b>', $bb );
    $bb = preg_replace ( '/\[u\](.*?)\[\/U\]/', '<u>$1</u>', $bb );
    $bb = preg_replace ( '/\[i\](.*?)\[\/I\]/', '<i>$1</i>', $bb );

    return $bb;

 }

include ("cfg.php");


$dbverbindung = mysql_connect ($host, $user, $password);


mysql_select_db($dbname, $dbverbindung);


$dbanfrage = "select l.forum_id,l.topic_id,l.topic_title,l.topic_first_poster_name,s.post_subject,s.topic_id,s.post_text from phpbb_topics l,phpbb_posts s where l.forum_id = 2 AND s.topic_id = l.topic_id AND s.poster_id = l.topic_poster AND s.post_subject = l.topic_title ORDER BY l.topic_id DESC";


$result = mysql_query ($dbanfrage, $dbverbindung);


 while ($ausgabe = mysql_fetch_array ($result))
 {

 $text1 = nl2br ("<div id=\"content_title\">$ausgabe[topic_title]</div><div id=\"content_text\">$ausgabe[post_text]</div><div id=\"content_autor\">Autor: $ausgabe[topic_first_poster_name]<div id=\"content_link\"><a href=\"forum/viewtopic.php?f=2&t=".$ausgabe[topic_id]."\">zum Thema</a></div></div>");

 $formatiert = bbcode( $text1 );

 echo $formatiert;
 }


mysql_close ($dbverbindung)

?>
 
hiho,

ja ich schon wieder.^^

ich habe nun meinen fehler gefunden und zwar wird bei phpbb3 eine bbcode_uid an die bbcode-tags dran gehangen, weshalb ich das falsche gefiltert habe.
da sich die bbcode_uid immer ändert muss ich diese auch aus der db lesen und dann ins preg_replace einbauen.

der bbcode steht in der db also als z.B. [img:h27en18q]url[/img:h27en18q]. h27en18q ist dabei die bbcode_uid.

leider schaffe ich es einfach nicht, dass ich sie dort rein bekomme, und sie funktioniert. hab nun schon einiges rumprobiert, aber finde leider den fehler nicht...

hoffe mir kann jmd helfen, so siehts momentan aus.

PHP:
 $uid = $ausgabe[bbcode_uid];

    $bb = preg_replace ( '/\[align:".$uid."]=(.*?)\](.*?)\[\/align:".$uid."\]/', '<div style="text-align:$1;">$2</div>', $bb );
    $bb = preg_replace ( '/\[img:".$uid."\](.*?)\[\/img:".$uid."\]/', '<img src="$1">', $bb );
    $bb = preg_replace ( '/\[url:".$uid."=(.*?)\](.*?)\[\/url:".$uid."\]/', '<a href="$1" target="_blank">$2</a>', $bb );
    $bb = preg_replace ( '/\[size:".$uid."=(.*?)\](.*?)\[\/size:".$uid."\]/', '<span style="font-size:$1pt;">$2</span>', $bb );
    $bb = preg_replace ( '/\[color:".$uid."=(.*?)\](.*?)\[\/color:".$uid."\]/', '<font color="$1">$2</font>', $bb );
    $bb = preg_replace ( '/\[b:".$uid."\](.*?)\[\/b:".$uid."\]/', '<b>$1</b>', $bb );
    $bb = preg_replace ( '/\[u:".$uid."\](.*?)\[\/u:".$uid."\]/', '<u>$1</u>', $bb );
    $bb = preg_replace ( '/\[i:".$uid."\](.*?)\[\/i:".$uid."\]/', '<i>$1</i>', $bb );

 echo $bb;

MfG

Sahe
 
Zurück