BBCode-Converter

September 2009

Diese Funktion dient dazu, einen mit BBCode formatierten Text in HTML umzuschreiben.

Hier sind nur wenige Tags aufgelistet. Die Funktion lässt sich beliebig erweitern.
<?php
function bbc2html($tmpText){
 
/*[b]*/ $tmpText preg_replace('#\[b\](.*)\[/b\]#isU''<b>$1</span>'$tmpText);
 
/*[i]*/ $tmpText preg_replace('#\[i\](.*)\[/i\]#isU''<i>$1</span>'$tmpText);
 
/*[u]*/ $tmpText preg_replace('#\[u\](.*)\[/u\]#isU''<span style="text-decoration:underline">$1</span>'$tmpText);
 
/*[color]*/ $tmpText preg_replace('#\[color=(.*)\](.*)\[\/color\]#isU''<span style="color:$1;">$2</span>'$tmpText);
 
/*[size] */ $tmpText preg_replace('#\[size=([0-9]{1,2})\](.*)\[\/size\]#isU''<span style="font-size:$1px;">$2</span>'$tmpText);
 
/*[font] */ $tmpText preg_replace('#\[font=(.*)\](.*)\[\/font\]#isU''<span style="font-family:$1;">$2</span>'$tmpText);
 
/*[url]*/ $tmpText preg_replace('#\[url=(.*)\](.*)\[\/url\]#isU''<a href="$1">$2</a>'$tmpText);
 
/*[url]*/ $tmpText preg_replace('#\[url\](.*)\[\/url\]#isU''<a href="$1">$1</a>'$tmpText);
 
/*[img]*/ $tmpText preg_replace('#\[img\](.*)\[\/img\]#isU''<img src="$1" alt="Bild" />'$tmpText);
 
/*[center]*/ $tmpText preg_replace('#\[center\](.*)\[\/center\]#isU''<div style="text-align:center">$1</div>'$tmpText);
 
/*[right] */ $tmpText preg_replace('#\[right\](.*)\[\/right\]#isU''<div style="text-align:right">$1</div>'$tmpText);
  return 
$tmpText;
}
?>

Anwendung des BBCodes:
TagNameAnwendung mit Beispiel
[b]fett[b]Text[/b]
[i]kursiv[i]Text[/i]
[u]unterstrichen[u]Text[/u]
[color]Textfarbe[color=olive]Text[/color]
[size]Textgrösse[size=8]Text[/size]
[font]Schriftart[font='courier new']Text[/font]
[url]Hyperlink[url]http://domain/[/url]
[url=http://domain/]Text[/url]
[img]Bild[img]http://pfad.zum/bild.jpg[/img]
[center]zentriert
[center]Text[/center]
[right]rechts
[right]Text[/right]


Daneben gibt es noch ein bisschen komplexere Umwandlungen, wenn zum Beispiel alle in einander verschachtelten Zitat-Blöcke geparst werden sollen:
<?php
/*[quote]*/
while(preg_match('#\[quote\](.*)\[\/quote\]#isU'$tmpText))
  
$tmpText preg_replace('#\[quote\](.*)\[\/quote\]#isU''<div class="quote">$1</div>'$tmpText);
?>

Oder wenn eine (mehrsimensionale) Liste à [list] [*]Punkt 1 [*]Punkt 2 [/list] entstehen soll, dann muss schon eine Callback-Funktion ran:
<?php
/*[list]*/
while(preg_match('#\[list\](.*)\[\/list\]#is'$tmpText)){
  
$tmpText preg_replace_callback('#\[list\](.*)\[\/list\]#isU',
    
create_function('$str',"return str_replace(array(\"\\r\",\"\\n\"),'','<ul>'.preg_replace('#\[\*\](.*)\$#isU',
    '<li>\$1</li>',preg_replace('#\[\*\](.*)(\<li\>|\$)#isU','<li>\$1</li>\$2',preg_replace('#\[\*\](.*)(\[\*\]|\$)#isU',
    '<li>\$1</li>\$2',\$str[1]))).'</ul>');"
), $tmpText);
  
$tmpText preg_replace('#<ul></li>(.*)</ul>(<li>|</ul>)#isU''<ul>$1</ul></li>$2'$tmpText); // Validitäts-Korrektur
}
?>

Ähnlich lassen sich auch Code-Blöcke mit PHP-Syntax-Highlighting erstellen:
<?php
/*[php]*/
$tmpText preg_replace_callback('#\[php\](.*)\[/php\]#isU',
    
create_function('$str','return highlight_string($str[1], true);'),
    
$tmpText);
?>

Zusätzlich kann man auch noch Smilies in Grafiken umwandeln:
<?php
/* :) */ $tmp_text str_replace(':)''<img src="smilies/happy.gif" alt=":)" />'$tmp_text);
/* :D */ $tmp_text str_replace(':D''<img src="smilies/laugh.gif" alt=":D" />'$tmp_text);
/* ;) */ $tmp_text str_replace(';)''<img src="smilies/wink.gif" alt=";)" />'$tmp_text);
/*etc.*/
?>

Siehe auch:
 


Andere Einträge


Kommentare

#1
von habbo-helfer am 21.03.2013
Sehr gut gemacht. :).