BBCode Funktion

DerEisige

Erfahrenes Mitglied
hi
ich hab mal wieder ein kleines Problem.
Meine BBCod Funktion funktioniert nicht richtig.

Das Problem ist wen die Befehle nicht in einer Zeile stehen wird es nicht richtig in HTML umgewandelt.

BBCod
PHP:
function BBCodeHTML($text){
	
	$text = preg_replace('/\[ b \](.*?)\[\ /b \]/', '<b>$1</b>', $text);
        $text = preg_replace('/\[ i \](.*?)\[\ /i \]/', '<i>$1</i>', $text);
        $text = preg_replace('/\[ color=([[:alnum:]]{6}?).*\ ](.*?)\[\ /color \]/', '<font color="$1">$2</font>', $text);
        $text = preg_replace('/\[ url=([^ ]+).*\ ](.*)\[\ /url \]/', '<a href="$1">$2</a>', $text);
	
	$text = nl2br($text);
	$text = stripslashes($text);
return $text;
}
PHP:
echo BBCodeHTML("[ b ]Text fett gedruckt[ /b ][ i ]
Text kursiv-----------------------------------------------------[ /i ].
[ color=#ff0000 ]Text rot.[ /color ]
[ url=http://www.tutorials.de ]Link[ /url ].");
 
Zuletzt bearbeitet:
Siehe
http://php.net/manual/de/reference.pcre.pattern.modifiers.php
speziell
s (PCRE_DOTALL)
Wenn dieser Modifikator gesetzt ist, passt das Metazeichen Punkt im Suchmuster auf alle Zeichen inklusive Zeilenumbrüche. Ohne diesen Modifikator sind Zeilenumbrüche ausgeschlossen. Dieser Modifikator entspricht dem Perl-Modifikator /s. Unabhängig davon, ob dieser Modifikator gesetzt ist, passt eine verneinende Zeichenklasse wie z.B. [^a] immer auf einen Zeilenumbruch.

Also füg ans Ende deines Ausdrucks noch ein s an.

Nachtrag:
Wenn du danach noch das Raute-Symbol deinem Ausdruck für das Color-Tag hinzufügst (nach dem Gleichheitszeichen), wird auch das korrekt ersetzt.

PHP:
function BBCodeHTML($text){
    
    $text = preg_replace('/\[b\](.*?)\[\/b\]/s', '<b>$1</b>', $text);
        $text = preg_replace('/\[i\](.*?)\[\/i\]/s', '<i>$1</i>', $text);
        $text = preg_replace('/\[color=(#[[:alnum:]]{6}?).*\](.*?)\[\/color\]/s', '<font color="$1">$2</font>', $text);
        $text = preg_replace('/\[url=([^ ]+).*\](.*)\[\/url\]/s', '<a href="$1">$2</a>', $text);
    
    $text = nl2br($text);
    $text = stripslashes($text);
return $text;
}
 
Zuletzt bearbeitet:
Zurück