Rolf B: Warum kommen hier unterschiedliche Ergebnisse raus?

Beitrag lesen

Hallo Jörg,

so langsam komme ich dahinter, was du treibst und wo genau deine Probleme sind 😉

Du entfernst durch den explode die \n aus der Eingabe. In der Schleife setzt du $neuerText ohne \n wieder zusammen.

Ergebnis: der alte Text ohne jeden Zeilenumbruch.

Dein str_relace innerhalb der Schleife ist sinnlos, denke ich. Nach dem explode sind in den Trümmerstücken keine \n mehr zu finden, die sind alle explodiert. Der str_replace wird niemals etwas zu tun bekommen.

Geht es Dir darum, Zeilenumbrüche zu beseitigen, wenn zwei BBCodes aufeinander folgen und zwischen ihnen nur Whitespace ist?

Also z.B. an Stellen wie hier:

[tr][td][/td]
[td]dzerh[/td]
[/tr]

Der BBCode-Konverter sollte daraus dies machen:

<tr><td></td>
<td>dzerh</td>
</tr>

und das ist soweit okay. Aber dein nl2br, mit dem Du in normalem Text Zeilenumbrüche erhalten willst, schießt Dir quer und setzt da <br> ein. Das dürfte das Problem sein.

Im ersten Schritt könnte man versuchen, nur dann ein <br> einzusetzen, wenn man zwei Zeilenumbrüche hintereinander findet. Dazwischen kann noch Whitespace sein, es ist nicht selten, dass jemand Leerstellen in einer Leerzeile hat. Du könntest also statt nl2br einen Replace von /\n\s*\n/ durch <br><br> ausprobieren. Dein System würde sich dann ähnlich wie das Forum verhalten: wenn Du keine Leerzeile machst, wird der Text zu einem Paragraphen zusammengepappt.

Die CForum-Sonderlocke, dass ein Zeilenumbruch erhalten bleibt, wenn eine Zeile auf zwei Leerstellen endet, so wie hier,
kannst Du ggf. auch noch irgendwie realisieren, wenn Du zuerst /(\S) {2,}\n/ durch $1<br> ersetzt. Diese Regex matcht ein Non-Whitespace, zwei oder mehr Spaces und ein \n. In der Ersetzung wird das gematchte Non-Whitespace behalten und dann ein <br> gesetzt. Man könnte ggf. noch das geschützte Space berücksichtigen (\u00a0), aber nicht \s (weil das auch \n matcht).

Das "Zusammenpappen zu einem Paragraphen" würde ich dann aber den Browser überlassen. Ich denke, es kann zu unerwünschten Nebenwirkungen führen, wenn Du blindlings \n durch " " ersetzt.

Rolf

--
sumpsi - posui - obstruxi