Sie befinden sich hier im Forenarchiv von phpforum.de wenn Sie direkt ins Forum möchten, klicken Sie bitte hier. Zur Startseite kommen Sie hier.

Auto-Zeilenumbruch bei PHP + BBCodes

Hallöchen,

ich programmiere derzeit an einem CMS, an welchem es registrierten Benutzern unter anderem möglich ist, Kommentare auf News zu schreiben.

Nun gibt es erfahrungsgemäß hin und wieder Gäste, die das System testen möchte und beispielsweise ewig lange Ziffernfolgen posten. Ohne formatierungsinstrumente würde somit eine umschließende Tabelle in die länge "gepresst" werden. (mit overflow:auto/hidden usw kann ich mich nicht anfreunden).

Deswegen habe ich folgendes Script geschrieben:


Code:                   In Zwischenablage kopieren (nur IE)
1">

Dieses Script macht folgendes: Es bricht nach (in diesem Fall) 100 Zeichen das "Wort" einfach ab und fügt ein Leerzeichen ein. Daraus folgt ggf. ein Zeilenumbruch. So weit so gut.

Problem ist, dass der Autor des Kommentars BBCodes (Datei / Funktion "bb_parser") nutzen kann. Die BBCodes werden aufgrund der Funktion von der preg_replace() logischweise jedoch nur noch Wort für Wort geparsed (Ist parsen hier der richige Begriff?!). Entsprechend bekommt die BB-Code-Funktion (preg_replace, Aufbau siehe unten) beispielsweise nur ein $word bzw. $value des jeweiligen Arrayelements explode(" ", ...).

Hier kurz die Zeile der bb_code() für das Tag $text -> <b>text</b>

Code:                   In Zwischenablage kopieren (nur IE)
2">

Ein oben angesprochenes Arrayelement ist dann zum Beispiel folgendes:
-> [ b ] Das "

Eigentlich hat der User aber folgendes eingegeben:
-> [ b ] Das hier ist ein Fetter text [ / b ] "

Wird nun der obere Arraywert an bb_parser() übergeben, wird er nichts parsen. Das tag geht ja nicht zu.



Nun gibt es zwei Möglichkeiten:
1) Ich schreib die Funktion bb_parser() so um, dass dieses nur nach [b] sucht und nicht nach [b]...
und entsprechend aus [b] -> <b> macht. Das wäre nicht sehr ellegant, und könnte ggf. den Rest der Seite (aushalb der Newskommentare) falsch formatieren, wenn der Autor des kommentars nicht sauber arbeitet. Diese Möglichkeit fällt also weg

2) Der komplette String des Autors (welche im übrigen über mySQL - DB läuft) mit dem o.g. Script auf Wortlänge überprüfen und dies entsprechend ändern, und erst dann die Funktion bb_codes() drüber laufen lassen. Nur leider ist mir schleiferhaft wie ich das anstellen soll.

Bin dankbar über jede hilfe.

Grüße Volki
Hier gehts zum Orginal Eintrag "Auto-Zeilenumbruch bei PHP + BBCodes" im Forum

Antworten

Erstmal: http://de2.php.net/manual/de/function.wordwrap.php
Oder besser noch die Probleme im Vorfeld verhindern: wrap="physical"
Siehe: http://de.selfhtml.org/html/formulare/eingabe.htm#bereiche_umbruch

Dieser dürfte besser sein, als dein selbstgebastelter:
http://www.christian-seiler.de/projekte/php/bbcode/index.html


2.

Du mußt den preg_replace so umschreiben, daß er auch Zeilenumbrüche "mitnimmt":

Code:                   In Zwischenablage kopieren (nur IE)
3">




3.

@combie: Danke für den Tip.
@Bernd456: Sorry, vielleicht war meine Beschreibung etwas undurchsichtig oder nicht verständlich. Das umschreiben des preg_replace wäre allerdings nur in einem zweiten Schritt notwendig, da ich ja einzelne Werte mit o.s. Script an bb_parser() übergebe. Das war ja das eigentliche Problem.

Habs nun umgeschrieben. In Mathematik würde mal von kummulieren sprechen. Und im Grunde kummuliere ich die Strings auf einandere auf und bau mir so einen neuen "gesamt-String" zusammen (sorry für meine schlechte Formulierung, habs nicht so mit Fachbegriffen :) ). Dieses "gesamt-String" wird dann komplett an bb_parser() übergeben. Dann funktionierts.

Also sozusagen so: (auch wenns jetzt dann noch nicht optimiert ist. Einfach mal zu reinen funktionieren tuts das :). Dachte es könnte jemanden interessieren. Viellecith auch einfach ins "Anfängerforum" verschieben ^^.
Code:                   In Zwischenablage kopieren (nur IE)
4">




Hier gehts zum Orginal Eintrag "Auto-Zeilenumbruch bei PHP + BBCodes" im Forum
 
phpforum.de | Impressum