![]() |
[PHP] Alternativ zu nl2br
Hi,
ich bin gerade dabei ein neues CMS zu schreiben. Auf PHP-Basis. Funktioniert soweit super. Nur ist mir jetzt folgendes aufgefallen. Eine Seite sieht z.B. so aus:
Code:
Damit die Zeilenumbrüche korrekt erstellt werden jage ich beim Darstellen noch einmal ein
[[Designing the Future!]]
[CSD-Software :: Designing the Future] // PAGECONTENT // <table width="80%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="10%" align="center" valign="top"> Hier steht ein wenig Text... Und noch mehr in einer zweiten Zeile </td> <td width="40%" valign="top"> Hier steht ein wenig Text... Und noch mehr in einer zweiten Zeile </td> </tr> </table> // EOF //
Code:
drüber.
$line = nl2br($line);
Funktioniert theoretisch auch wunderbar. Praktisch gibt es jedoch ein paar Probleme: dadurch dass der Code für die Tabellen schön formatiert ist, wird hinter jede Zeile ein gesetzt. Und deswegen sieht das ganze am Ende ungefähr so aus:
Code:
Wodurch die Tabelle einige Zeilen nach unten rückt, weil Zeilenumbrüche innerhalb einer Tabelle (also da, wo kein Text sein sollte) nicht wirklich korrekt sind.
<table width="80%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr> <td width="10%" align="center" valign="top"> Hier steht ein wenig Text... Und noch mehr in einer zweiten Zeile </td> <td width="40%" valign="top"> Hier steht ein wenig Text... Und noch mehr in einer zweiten Zeile </td> </tr> </table> Jetzt ist meine Frage, ob es eine Alternativ zu nl2br(); gibt, oder ob ich jetzt für die Tabelle irgendeine Alternative finden muss. Chris |
Re: [PHP] Alternativ zu nl2br
Ich verstehe das Problem nicht wirklich eine 100 prozentige Alternatvie wäre str_replace("\r\n", '
', $text); Vielleicht meinst du ![]() mfG, titus |
Re: [PHP] Alternativ zu nl2br
Hi,
nein... Das Problem ist, dass PHP mit nl2br(); auch hinter HTML-Dinge wie
Code:
ein
<table>
setzt. Und das ist halt ... nunja... nicht korrekt und das Ergebnis sieht auch recht bescheiden aus. Mit "Alternative" meinte ich, ob nicht irgendwer eine hardgecodete Funktion kennt/hütet (o.ä.), die eben das umgeht. Chris |
Re: [PHP] Alternativ zu nl2br
Hallo,
in Teilen, die lediglich HTMl Tags enthalten, benutzt Du natürlich kein nl2br(), sondern hängst einfach ein \n an das Zeilenende, wenn Du den Code unbedingt formatiert haben willst. Nur bei Text, der Umbrüche enthält, benutzt Du nl2br();. |
Re: [PHP] Alternativ zu nl2br
Hi,
hö? Ein einfaches Anhängen wird es aber nicht sein, weil ja trotzdem ein Zeilenumbruch da sein muss, wo der Text steht. ;) Das sollen ja zwei Zeilen sein. ;) Chris |
Re: [PHP] Alternativ zu nl2br
naja vielleicht ein möglichkeit:
du machst um den text, der umgebrochen werden soll sowas: <nl2br>text text test</nl2br> und dann einfach: $text = preg_replace('#<nl2br>(.*?)</nl2br>#ie', 'nl2br(\'\\1\');'); ansonsten ist das nur schwer möglich (man muss halt kennzeichen, wo der text umgebrochen werden soll und wo nicht.) Aber ich meine, wenn der User schon alleine seine Tabellen machen muss, dann sollte er auch alleine seine machen ;) mfG, titus |
Re: [PHP] Alternativ zu nl2br
Hi,
hm... einfacher fände ich den genau umgekehrten Fall. ;) Alles, wo kein Umbruch sein soll, wird mit [no2br] oder umschlossen. Kennst du dafür irgendwas? Ich würde mir ja selber einen regulären Ausdruck schreiben, nur habe ich ich davon so viel Ahnung, wie eine Kuh vom Coden. ;) Chris |
Re: [PHP] Alternativ zu nl2br
In dem Fall wäre der umzubrechende Code ja mit "[/no2br]" und "[no2br]" umschlossen:
Code:
Also sieht der Ausdruck genauso aus, nur andersrum ;-)
[no2br]<html>
<und mehr>[/no2br] Blah blubb [no2br]</und mehr> </hmtl>[/no2br]
Code:
Ich bin mir grad' nicht sicher, ob der Forward Slash in PCRE auch escaped werden muss und auch nicht ob es bei einem der Zeichen n, o, 2, b und r der Fall ist, ist alles so lange her...
$newtext = preg_replace('#\[\/no2br\](.*?)\[no2br\]#ie', 'nl2br(\\1);');
|
Re: [PHP] Alternativ zu nl2br
Ne so geht das nicht.
Man müsste den Ausdruck irgendwie mit ^ umdrehen, aber es klappt bei mir einfach nicht :| ich probier mal weiter |
Re: [PHP] Alternativ zu nl2br
Wieso geht das nicht?
Mit ^ findest du Dinge, die das gesuchte nicht enthalten, damit kann man keinen Blumentopf gewinnen. |
Re: [PHP] Alternativ zu nl2br
Hallo,
also nochmal: 1. Text, der Umbrüche enthält, wird mit nl2br() ausgegeben, da diese Funktion die erforderlichen Tags einfügt. 2. Text, der in der HTML Datei einen Umbruch haben soll, also NICHT in der Darstellung, wird mit einem angehängten \n umgebrochen. Der Backslash ist das Escapezeichen aus der Unixwelt zum Kennzeichnen von Sonderzeichen, in diesem Fall \n für Linebreak. Das ist doch sehr simpel, Du musst Nur Umbrüche im Quelltext und Umbrüche im im Browser angezeigten Text unterscheiden! |
Re: [PHP] Alternativ zu nl2br
Witzig, wie findet er raus, ob eine Zeile zum Fließtext gehört?
Er hat ja nunmal dummerweise den Text und den Quellcode zusammen, so würde ich zwar nie ein CMS schreiben (und habe es auch nicht so gemacht bei meinem :mrgreen:), aber wenn es ihm anders nicht möglich ist (weiß der Geier aus welchen Gründen), dann muss er halt die Teile, die einen HTML-Umbruch haben sollen, entsprechend markieren. |
Re: [PHP] Alternativ zu nl2br
@tommie-lie: Weil dein Befehl alle Zeilen umbricht, die mit [no2br] markiert sind also die Sachen, die er eigentlich nicht will, man könnte irgendwie den Befehl negativieren, so dass das Statement gerade andersrum verfährt.
Wieso wiederholst du das was ich schon gesagt hab? Dann mach jedem im CMS klar, dass ein Umbruch ist und wer das nicht kapiert hat auch keine Ahnung. ;) mfG, titus |
Re: [PHP] Alternativ zu nl2br
Hi,
danke, funktioniert jetzt... :) Allerdings ist diese Lösung wirklich sehr suboptimal. Ich überlege gerade, wie man die Tabelle vereinfachen kann... Vermutlich werde ich das mit einem kleinen Skript (das CMS ist voll von kleien Makros :lol:). Danke für eure Hilfe, Chris |
Re: [PHP] Alternativ zu nl2br
Zitat:
Nein... Der Ausdruck sucht nach "[/no2br].*[n2br]", also nach allem was zwischen Ende und Anfang eines no2br-Tags steht, gefunden wird also der eigentliche Text zwischen HTML-Kram. Zitat:
Zitat:
Aber abgesehen davon will ich nochmal auf meine Anspielung zurückkommen: So macht man kein CMS! Wieso trennst du nicht Inhalt und Layout voneinander? Das ist nämlich eigentich Sinn der Sache. Der Text wird irgendwo anders gespeichert, sodaß du an den einzeln rankommst und den komplet durch nl2br() jagen kannst. Das Layout ist in einer Template-Datei, die entsprechende Schlüsselwörter/Platzhalter enthält, die beim Anzeigen der Seite dann durch den (fertig umgebrochenen) Text ersetzt werden. Selbst ohne Dateinbank sollte das möglich sein, auch wenn's natürlich schicker ist, wenn man die Texte aus 'ner Datenbank sammelt :mrgreen: |
Re: [PHP] Alternativ zu nl2br
Hi,
Zitat:
Zitat:
Zitat:
Chris |
Re: [PHP] Alternativ zu nl2br
Zitat:
Zur Not, wenn eine Seite absolut nicht zum Rest der Seite passt weil zuviel anders ist (ich will mich ja ab und zu auch mal selbst verwirklichen :-) (meist vermiesen mir die Browser das aber...)), kann man sie eben nicht über das CMS verwalten sondern muss eben eine normale HTML-Datei nehmen. Zitat:
Du hast 'ne PM. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz