![]() |
nl2br(), nur nicht für HTML-Code
Hi,
ich lese aus einer Datenbank mittels PHP einige Einträge aus, die unter anderem HTML-Code enthalten können. Hier mal schnell ein kleines Beispiel solch eines Eintrags:
Code:
Um die Absätze darzustellen nutze ich die PHP-Funktion nl2br(), die mit Absätze in ein
Bla bla blubb di wupp
hier eine neue zeile und da noch eine wuppdi und nun folgt eine Tabelle: <table> <tr> <td>Hallo</td> </tr> </table> Hier wieder Text mit Zeilenumbruch umwandelt. Soweit so gut, nun wird jedoch absolut jeder Absatz umgwandelt (eigentlich verständlich), nur möchte ich natürlich den erzuegten Code so haben, dass nur der Text Absätze enthält. Das was ich gerne hätte:
Code:
Erzeugt wird logischerweise das hier:
Bla bla blubb di wupp
hier eine neue zeile und da noch eine wuppdi und nun folgt eine Tabelle: <table> <tr> <td>Hallo</td> </tr> </table> Hier wieder Text mit Zeilenumbruch.
Code:
Wie kann ich HTML-Code von dieser Funktion ausschließen oder wie kann ich das ganze sauber lösen?
Bla bla blubb di wupp
hier eine neue zeile und da noch eine wuppdi und nun folgt eine Tabelle: <table>[b] [/b] <tr>[b] [/b] <td>Hallo</td>[b] [/b] </tr>[b] [/b] </table>[b] [/b] Hier wieder Text mit Zeilenumbruch. |
Re: nl2br(), nur nicht für HTML-Code
du könntest abfragen ob das letzte Zeichen in der Reihe ein > ist, dann ist es sehr wahrscheinlich das dort ein html tag ist!
Perfekt ist das aber nicht! |
Re: nl2br(), nur nicht für HTML-Code
Vielleicht gibt es für dein Problem auch eine Funktion, aber ich würde einfach einen Regex auf den String loslassen. Soll heißen, nach Zeilen mit Text außerhalb von Tags suchen und diesen dann das
anhängen. [add] @Eichhörnchen: Du sagst es ;) . Deshalb empfehle ich Regular Expressions. [/add] |
Re: nl2br(), nur nicht für HTML-Code
Naja, so einfach wird das nicht werden, da ja auch innerhalb bestimmter Tags Zeilenumbrüche vorkommen können (z.B. in td oder p). :gruebel:
Als grobe Lösung würde ich den Text in HTML- und nicht HTML-Zeilen aufteilen (mit preg_split() bzw. preg_match_all()) und dann nl2br() auf den Nicht-HTML-Teil anwenden. :wink: Am besten wird dann wohl sein, dass du das ganze schon beim Eintragen machst, um die Page Generation Time nicht unnötig zu strapazieren... :wink: Edit: @Khabarakh: Oder so. :stupid: |
Re: nl2br(), nur nicht für HTML-Code
Hi,
die Lösung mit den regulären Ausdrücken klingt gut, nur müsst ihr wissen, dass ich diese nicht so sonderlich gut beherrsche. :stupid: Ich benötige sie eigentlich nur, um URLs umzuschreiben. Könntet ihr mir evtl. ein kleines Beispiel geben, wie das aussehen könnte? Das Problem ist in meinen Augen, dass es ja auch mehrere HTML-Blöcke geben kann und nicht nur einen. Ich wüsste nicht, wie man das dynamisch lösen kann. |
Re: nl2br(), nur nicht für HTML-Code
moin,
wäre es dann nicht einfacher mit bbcode zu arbeiten, matze :stupid: ? |
Re: nl2br(), nur nicht für HTML-Code
Naja, du könntest den Text zeichenweise durchgehen.
Für jedes '<' erhöhst du einen Counter um 1. Für jedes '/>' oder '</' verringerst du ihn um 1. Für jedes "\n" fügst du ein ein, falls der Counter 0 ist. Im Fall von '</' wird natürlich nicht 1 zum Counter dazugezählt. Damit solltest du nur bekommen, wenn du ausserhalb eines HTML-Blocks bist. Ungetestet. |
Re: nl2br(), nur nicht für HTML-Code
Zitat:
Zitat:
|
Re: nl2br(), nur nicht für HTML-Code
Hi!
Bist du selber für den Text "verantwortlich"? Also wird er durch dich (oder dein Programm, Website) in die DB eingetragen? Falls ja, würde ich um die HTML-Blöcke ne Art "Codewort setzen" und dann den Text eben gesplittet bearbeiten: Neuer_Text := nl2br(alter_Text1)+alterCode1 + nl2br/alter_Text2) etc... Ciao Frederic |
Re: nl2br(), nur nicht für HTML-Code
Ist doch im Grunde nichts weiter als bbcode^^ :wink:
Code:
[p]Absatz1-hier werden auch Zeilenumbrueche ersetzt[/p]
[p]Absatz2- und hier auch...[/p] [html] Tabellen, etc... [/html] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:28 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 by Thomas Breitkreuz