Seite 1 von 1

Zeilenumbruch am Anfang und Ende in [code] entfernen

Verfasst: 06.07.2015 18:23
von Maxe
Hllo zusammen,

gleich eins vorweg - ich benutze noch phpBB2 und möchte kein Update auf 3 ;-)

In meinem Forum habe ich in der bbCode Umgebung für die Formatierung "code" das Problem, dass ich gerne die ersten Zeilenumbrüche und die letzten entfernen möchte.

Grund ist folgender - viele User setzen den bbCode-Start, machen einen oder mehrere Zeilenumbrüchen, dann kommt erst der wirkliche Code.
Diesen Leeren Platz möchte ich entfernen bei der Darstellung.

Ich habe schon von der trim Funktion gehört und auch schon viel ausprobiert. Leider ohne Erfolg.

Meine Idee wäre es, die Zeilenumbrüche direkt beim Speichern der Nachricht in die DB zu entfernen.
Mir wäre es aber auch egal, wenn man es bei jedem Anzeigen "rauslöscht".

Randinfo falls wichtig: Ich verwende Geshi zur Code-Aufbereitung.

Habt ihr eine Lösung?
Das gleiche Verhalten hat übrigens auch die quote Funktion. Vielleicht kann man alles mit einer Klappe erschlagen?!

Viele liebe Grüße und vorab herzlichen Dank für die Unterschützung eines phpBB Rentners (phpBB2) ;-)
Maxe

Re: Zeilenumbruch am Anfang und Ende in [code] entfernen

Verfasst: 07.07.2015 11:12
von gn#36
Ebenso vorab: phpBB 2 ist für mich schon ziemlich lange her - ein bisschen was wirst du selbst ausprobieren müssen. Alles folgende ist ungetestet. Also bitte an einem Backup ausprobieren - nicht dass dir alle neuen Beiträge und Edits kaputtgehen.

In der includes/functions_bbcode.php gibt es in der Funktion bbencode_first_pass_pda ca. in Zeile 430 folgende Stelle:

Code: Alles auswählen

if ($found_start)
{
An dieser Stelle wurde für diverse BBcodes ein Start-Tag gefunden (also um genau zu sein [ quote=... ], [ code ], [ list ]). Die Position im Text steht in $curr_pos, wobei das die Position des [ ist. Es wäre also möglich, den nachfolgenden Text an genau der Stelle zu manipulieren. Das ist bei [ code ] leichter als bei [ quote ], weil die Quote Tags mit [ quote= ... ] beliebig lang werden können. Wie die Tags identifiziert werden findest du direkt oben drüber. Praktischerweise steht zu diesem Zeitpunkt in der Variablen $possible_start der komplette Tag drin. Du kannst also einfach die Länge dieses Strings nehmen um den Tag selbst zu überspringen. Danach musst du nur ab dieser Position sämtlichen Whitespace mit Zeilenumbruch am Ende bis zum ersten Textzeichen löschen. Das geht (ungetestet) zum Beispiel mit sowas ähnlichem wie preg_match("#^(\s*\n)*#is", $text, $matches, $curr_pos + strlen($possible_start)).

Den Rest musst du selbst machen ;)

Beachte, dass diese Änderung nur neue Beiträge betreffen wird, weil das aufwändige Parsing der Code Tags nur beim speichern der Beiträge durchgeführt wird. Es gab aber meine ich mal Tools mit denen du alle Beiträge neu parsen kannst. Sonst musst du im Zweifel bei allen älteren Beiträgen, die problematisch sind ein mal kurz bearbeiten und wieder speichern.