UBB-Code: Parsing-Bereiche ausschließen

dkf

Erfahrenes Mitglied
Hallo,

habe ein kleines Problem beim parsen eines Textes.

Habe z.B. folgenden UBB-Code:
PHP:
			$message_to_convert = preg_replace("/\[b\](.*)\[\/b\]/iUms","<b>\\1</b>",$message_to_convert);
Unter anderem beinhaltet meine Funktion auch folgende Zeile:
PHP:
			$message_to_convert = nl2br($message_to_convert);
Jetzt möchte ich aber auch HTML-Code ausgeben, soll heißen, alles was zwischen [ HTML ] und [ /HTML ] steht, nicht geparst wird.
PHP:
if (!preg_match("/\[html\](.*)\[\/html\]/iUms", $message_to_convert))
		{
			// restlicher UBB-Code...
		}
...bewirkt aber, wenn die Zeichenfolge einmal vorkommt, wird aber leider gar nichts geparst.

Ich hoffe, das war alles verständlich.
Wenn ich dann eine Tabelle in HTML-Code in der Nachricht habe, bekomme ich durch nl2br() hinter jeder Zeile ein <br>, was das Tabellen-Layout dann auseinander reisst.
 
Hm, woran das nun genau liegt kann ich dir nicht sagen. Ich kann dir nu empfehlen, so wie ich es immer mache, derartige Dinge zu umgehen, in dem ich sie durch etwas ersetze, wo ich sicher weiß, wie sie funktionieren und den selben Zweck erfüllen. In dem Falle würde ich das ganze so machen:

PHP:
preg_match("/\[html\](.*)\[\/html\]/iUms", $message_to_convert, $treffer);
// Falls ein gesuchter Abschnitt vorkommt, wird dieser im der Variable $treffer gespeichert

if (!empty($treffer)) // überprüfen, ob $treffer nicht leer ist
{
     // restkiche UBB- Parserzeugs
}
Gib mal bitte bescheid, ob es so funktioniert. Würde mich selber interessieren. :)

Edit: Jetzt beim 2. Durchlesen deines Posts fällt mir auf, dass ich gar nicht so richtig sicher bin, ob das eine Antwort ist. Wird der entsprechende Textabschnitt nun nicht geparst und soll dieser Fehler behoben werden, oder richtet sich die Frage gen nl2br()?
 
Zuletzt bearbeitet:
HTML:
Text aus Datenbank
Noch
mehr
Zeilen

Nach dem parsen mit nl2br()

HTML:
Text aus Datenbank<br />
Noch<br />
mehr<br />
Zeilen<br />

Wenn allerdings als Quelle eine HTML-Tabellenstruktur vorliegt, dann:
HTML:
<table>
  <tr>
    <td>Text</td>
  </tr>
</table>

...sieht es danach so aus:
HTML:
<table><br />
  <tr><br />
    <td>Text</td><br />
  </tr><br />
</table><br />

Und das wiederrum ist nicht W3C-Konform und macht mir entsprechend über der Tabelle 5 Zeilenumbrüche und dann die Tabelle. Du kannst dir ja vorstellen, was passiert, wenn die Tabelle mehr Zeilen und Spalten hat, als hier.

Und um das ganze zu unterbinden, möchte ich, dass der HTML-Bereich mit [ HTML ] und [ /HTML ] "auskommentiert" wird und kein weiterer UBB-Code angewendet wird.
 
Zuletzt bearbeitet:
Na hast das oben genannte Schnipselchen mal verwendet und ausporbiert?
Sollen die entsprechenden tabellarischen Tags auch in der DB stehen? Wenn ja könntest du das auch anders lösen und allgemein gesagt die Umbrüche nach den HTML- Tags entfernen.
 
Zuletzt bearbeitet:
Habe ich das richtig verstanden, dass du einfach nur HTML Code, der zwischen [code=html] und [/code] steht, ausgegeben, statt vom Brwoser als solcher behandelt wird?
Versuch es mal hiermit
PHP:
$message_to_convert = preg_replace("/\[html\](.*)\[\/html\]/Ueis","<div style=\"width:500px;background:silver;border:2px inset gray;\">htmlspecialchars('\\1')</div>",$message_to_convert);
 
Zurück