Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [PHP] Alternativ zu nl2br (https://www.delphipraxis.net/26690-%5Bphp%5D-alternativ-zu-nl2br.html)

CalganX 27. Jul 2004 19:32


[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:
[[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 //
Damit die Zeilenumbrüche korrekt erstellt werden jage ich beim Darstellen noch einmal ein
Code:
$line = nl2br($line);
drüber.
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:
<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>
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.

Jetzt ist meine Frage, ob es eine Alternativ zu nl2br(); gibt, oder ob ich jetzt für die Tabelle irgendeine Alternative finden muss.

Chris

titus 27. Jul 2004 19:53

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 trim()?

mfG, titus

CalganX 27. Jul 2004 19:58

Re: [PHP] Alternativ zu nl2br
 
Hi,
nein... Das Problem ist, dass PHP mit nl2br(); auch hinter HTML-Dinge wie
Code:
<table>
ein
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

ichhabefertig 27. Jul 2004 19:59

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();.

CalganX 27. Jul 2004 20:06

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

titus 27. Jul 2004 20:11

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

CalganX 27. Jul 2004 20:22

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

tommie-lie 27. Jul 2004 20:52

Re: [PHP] Alternativ zu nl2br
 
In dem Fall wäre der umzubrechende Code ja mit "[/no2br]" und "[no2br]" umschlossen:
Code:
[no2br]<html>
  <und mehr>[/no2br]
    Blah
    blubb
  [no2br]</und mehr>
</hmtl>[/no2br]
Also sieht der Ausdruck genauso aus, nur andersrum ;-)
Code:
$newtext = preg_replace('#\[\/no2br\](.*?)\[no2br\]#ie', 'nl2br(\\1);');
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...

titus 27. Jul 2004 21:04

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

tommie-lie 27. Jul 2004 21:30

Re: [PHP] Alternativ zu nl2br
 
Wieso geht das nicht?
Mit ^ findest du Dinge, die das gesuchte nicht enthalten, damit kann man keinen Blumentopf gewinnen.

ichhabefertig 27. Jul 2004 21:51

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!

tommie-lie 27. Jul 2004 22:08

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.

titus 28. Jul 2004 05:38

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

CalganX 28. Jul 2004 09:45

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

tommie-lie 28. Jul 2004 10:23

Re: [PHP] Alternativ zu nl2br
 
Zitat:

Zitat von titus
@tommie-lie: Weil dein Befehl alle Zeilen umbricht, die mit [no2br] markiert sind also die Sachen, die er eigentlich nicht will

Habe ich mich etwa vertippt? :gruebel:
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:

Wieso wiederholst du das was ich schon gesagt hab?
Weil ichhabefertig es anscheinend immer noch nicht so ganz mitgekriegt hatte ;-)

Zitat:

Dann mach jedem im CMS klar, dass
ein Umbruch ist und wer das nicht kapiert hat auch keine Ahnung. ;)
Das klappt nur dann, wenn die Leute, die's Benutzen, Ahnung haben ;-)

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:

CalganX 28. Jul 2004 10:36

Re: [PHP] Alternativ zu nl2br
 
Hi,
Zitat:

Zitat von tommie-lie
Aber abgesehen davon will ich nochmal auf meine Anspielung zurückkommen: So macht man kein CMS!

Stimmt wohl. Ich will aber nur gerade mal anmerken, dass ich gerade mit der Entwicklung angefangen habe. ;)
Zitat:

Zitat von tommie-lie
Wieso trennst du nicht Inhalt und Layout voneinander? Das ist nämlich eigentich Sinn der Sache.

Tu' ich ja und eben das ist das Problem: das Design ist ja wunderbar. Nur ist innerhalb des Textes jetzt auf der Eingangsseite eine Tabelle, die das ganze ein wenig optisch aufwerten soll. ;)
Zitat:

Zitat von tommie-lie
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.

wunderbar. ;) Ich habe nach einer Template-Engine gesucht, duch die meisten waren nicht dass, was ich suchte oder waren für Foren wie phpBB/WBB. Wenn du Vorschläge hast, nehme ich sie gerne entgegen.

Chris

tommie-lie 28. Jul 2004 13:00

Re: [PHP] Alternativ zu nl2br
 
Zitat:

Zitat von Chakotay1308
Zitat:

Zitat von tommie-lie
Wieso trennst du nicht Inhalt und Layout voneinander? Das ist nämlich eigentich Sinn der Sache.

Tu' ich ja und eben das ist das Problem: das Design ist ja wunderbar. Nur ist innerhalb des Textes jetzt auf der Eingangsseite eine Tabelle, die das ganze ein wenig optisch aufwerten soll. ;)

Aber wenn dein Inhalt so gespeichert sit wie da oben gezeigt, nämlich Information und Layout (=Tabelle) zusammengewürfelt, ist das nicht getrennt ;-)
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:

Zitat von tommie-lie
wunderbar. ;) Ich habe nach einer Template-Engine gesucht, duch die meisten waren nicht dass, was ich suchte oder waren für Foren wie phpBB/WBB. Wenn du Vorschläge hast, nehme ich sie gerne entgegen.

Selberschreiben :-)
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