AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

nl2br(), nur nicht für HTML-Code

Ein Thema von Matze · begonnen am 12. Jul 2006 · letzter Beitrag vom 13. Jul 2006
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 20:39
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:
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
Um die Absätze darzustellen nutze ich die PHP-Funktion nl2br(), die mit Absätze in ein
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:
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.
Erzeugt wird logischerweise das hier:

Code:
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.
Wie kann ich HTML-Code von dieser Funktion ausschließen oder wie kann ich das ganze sauber lösen?
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 21:04
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!
Jan
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#3

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 21:11
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]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von S2B
S2B

Registriert seit: 1. Feb 2004
Ort: Aachen
1.268 Beiträge
 
#4

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 21:12
Naja, so einfach wird das nicht werden, da ja auch innerhalb bestimmter Tags Zeilenumbrüche vorkommen können (z.B. in td oder p).

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. Am besten wird dann wohl sein, dass du das ganze schon beim Eintragen machst, um die Page Generation Time nicht unnötig zu strapazieren...

Edit: @Khabarakh: Oder so.
Simon Praetorius
Gruß
S2B
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 22:33
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. 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.
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#6

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 23:05
moin,

wäre es dann nicht einfacher mit bbcode zu arbeiten, matze ?
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 23:09
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.
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 23:25
Zitat von bigg:
wäre es dann nicht einfacher mit bbcode zu arbeiten, matze ?
Das habe ich mir auch schon überlegt, doch hilft mir das ja nichts, denn da müsste ich bei einer Tabelle der Übersichtlichkeit halber auch Absätze machen.

Zitat von Mystic:
Naja, du könntest den Text zeichenweise durchgehen.
Das ginge, stimmt. Doch dann wird das ganze höchst unperformant und das möchte ich nicht.
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#9

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 23:33
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
Frederic Kerber
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#10

Re: nl2br(), nur nicht für HTML-Code

  Alt 12. Jul 2006, 23:37
Ist doch im Grunde nichts weiter als bbcode^^

Code:
[p]Absatz1-hier werden auch Zeilenumbrueche ersetzt[/p]

[p]Absatz2- und hier auch...[/p]

[html]
Tabellen, etc...
[/html]
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz