BB-Code / preg_replace()

pHyro

bla
Moin moin,

folgende Situation:

Ich code grade den BB-Code für ein neues Forum, und dabei binn ich auf den [code]-TAG gestoßen. Habe mich promt rangesetzt und was zusammengeschrieben.

Wenn man in der Form
Code:
[ code ]Hallo[ /code ]
schreibt, funktioniert alles wunderbar.

Wenn ich
Code:
[ code ]
Hallo
[ /code ]
schreibe, funktioniert es auch, alledrings wandelt er den Zeilenumbruch nach [ code ] auch in <br /> um, was ich nicht möchte.

Ausgabe wäre also:
Code:
Hallo

Hier mein Code:

PHP:
<?PHP
function bbCodes($string) {
	$search = array(
					'# #',														// Leerzeichen
					'#\[Code\](.*?)\[\/Code\]#si',								// Code
					'#\[B\](.*?)\[\/B\]#si',									// Bold
					'#\[U\](.*?)\[\/U\]#si',									// Underline
					'#\[Size=(.*?)\](.*?)\[\/Size\]#si',						// Size
					'#\[Line\]#i',												// Line
					);
	$replace = array(
					'&nbsp;',
					'<div style="padding: 0px; margin-left: 20px;font-size: 12px;">Code:</div><div style="overflow: auto; padding: 15px; font-family: Courier New; width: 60%; margin-left: 20px; border: 1px dashed grey; background: #d0d0d0; color: #222222;">$1</div>',
					'<b>$1</b>',
					'<u>$1</u>',
					'<font size="$1">$2</font>',
					'<hr noshade size="1">'
					);
	return preg_replace($search, $replace, $string);
}
$text = nl2br(bbCodes(stripslashes(htmlspecialchars($_POST['text']))));
echo $text;
?>

Also meine Frage: wie kann ich das Script umschreiben, so dass der Parser den ersten Zeilenumbruch ignoriert?

LG pHyro

Edit: Keiner der wüsste wie ich das machen könnte?
 
Zuletzt bearbeitet:
Hi, ich habe das mal Probiert woweit ich das verstanden habe!
So nun klappt es aber nicht wollte na ganz ganz einfache gruß box machen die auch mit bbcode läuft. Ich habe das den mal so gemacht
PHP:
<html>
<body bgcolor="#009ACD"><div align="center">&nbsp;<p>&nbsp;</p>
<?php
$now=strftime("%d.%m.%Y %H:%M:%S");
$daten="<b>Von: <u>  $name </b></u><br><b> Am:</b> &nbsp;&nbsp;$now <br><b> Nachricht:</b> $eintrag</a><br><hr>";

$datei = "shout.php";
$shout = fopen($datei,"a");
fwrite($shout, $daten);

error_reporting(E_ALL | E_NOTICE);

function parseBBCode2HTML( $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);
    $bb = preg_replace('/\[color=([[:alnum:]]{6}?).*\](.*?)\[\/color\]/', '<font color="#$1">$2</font>', $bb);
    $bb = preg_replace('/\[url=([^ ]+).*\](.*)\[\/url\]/', '<a href="$1">$2</a>', $bb);

    $bb = preg_replace('/\n/', "<br/>\n", $bb);

    return $bb;


$datei = "shout.txt";
$shout = fopen($datei,"r");
fpassthru($shout);
$text = ($daten);
$formatiert = parseBBCode2HTML( $text );

echo $formatiert;  
?>

Ich weiß etwas komisch aber bin noch Anfänger :) vieleicht kann mir ja jemand helfen !
 
Gibt mehrere Wege. Ich würds mir ganz einfach machen

Als erstes mal einen Suchpunkt rein " id="code"> "
PHP:
...
$replace = array(
                    '&nbsp;',
                    '<div style="padding: 0px; margin-left: 20px;font-size: 12px;">Code:</div><div style="overflow: auto; padding: 15px; font-family: Courier New; width: 60%; margin-left: 20px; border: 1px dashed grey; background: #d0d0d0; color: #222222;" id="code">$1</div>', 
...

Und dann einfach ein Replace 'id="code"><br />' = 'id="code">'
 
Hi,

noch ein kleiner Hinweis:
id="code" würde bedeuten, dass dieses DIV nur einmal im HTML vorkommen darf, also mit class="code" ersetzen. Wahscheinlich unwichtig, da es nur ein Beispiel war ...
Wollte es nur anmerken ;)

Gruß tyg3r
 
Joa wär warschienlich sowiso besser es mit class zu machen anstatt dem style attribut im TAG. Danke nochmal ;)

LG pHyro
 
Zurück