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
 
ehoffman

Registriert seit: 3. Jan 2006
Ort: Braunschweig
15 Beiträge
 
Delphi 2006 Enterprise
 
#13

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

  Alt 13. Jul 2006, 02:04
Hallo zusammen,

normalerweise lese ich hier nur mit, da ich zu den Delphi-Problemen nie wirklich etwas gutes sagen kann In diesem Fall kann ich aber durchaus auch etwas beitragen (denke ich zumindest). Grundsätzlich sollte die gesuchte Funktionalität mit folgender Regular Expression nach der in Perl verwendeten Syntax machbar sein (da nach PHP gefragt ist der Code auch in PHP):

Delphi-Quellcode:
preg_replace("/([^>])[\r\n]/", "\\1
", $input);
Damit werden alle Zeilenende (\r oder \n) mit einem "
" ersetzt die nicht an einem geschlossenen HTML-Tag enden. Insgesamt würde ich das dann etwa folgendermassen verwenden:

Delphi-Quellcode:
<?php
// Beispiel Eingabe aus dem Posting
$input = "Bla bla blubb di wupp\n".
         "hier eine neue zeile\n".
         "und da noch eine\n".
         "wuppdi und nun folgt eine Tabelle:\n".
         "\n".
         "<table>\n".
         " <tr>\n".
         " <td>Hallo</td>\n".
         " </tr>\n".
         "</table>\n".
         "\n".
         "Hier wieder Text\n".
         "mit Zeilenumbruch\n";

// Ersetze Windows Zeilenendungen durch ein einfaches \n wie unter UNIX ueblich
$input = preg_replace("/\r\n/", "\n", $input);

// Ersetze Mac oder UNIX Zeilenendungen durch ein
 wenn nicht hinter
// schließenden HTML-Tag
echo preg_replace("/([^>])[\r\n]/", "\\1
", $input);
Damit werden somit alle Zeilenendungen durch "
" ersetzt die sich nicht direkt hinter einem schließenden HTML-Tag befinden - es werden also auch die Zeilenenden erfasst die innerhalb eines HTML-Tags liegen, z.B. bei:

Delphi-Quellcode:
$input = "Bla bla blubb di wupp\n".
         "hier eine neue zeile\n".
         "und da noch eine\n".
         "wuppdi und nun folgt eine Tabelle:\n".
         "\n".
         "<table>\n".
         " <tr>\n".
         " <td>Hallo\n".
         " auch hier ist noch Text\n".
         " und hier sowieso\n".
         " aber nun ist genug</td>\n".
         " </tr>\n".
         "</table>\n".
         "\n".
         "Hier wieder Text\n".
         "mit Zeilenumbruch\n";
Die Bedingung in obigem Regex, wenn kein "
" gesetzt werden soll ist das vor dem Zeilenumbruch ein ">" steht. Eventuelle Leerzeichen (wie hier im Beispiel zur Formatierung genutzt) bleiben erhalten. Es sollte auch darauf geachtet werden, dass alle ">" die nicht mit HTML-Tags zu tun haben (z.B. in math. Formeln) und nach denen ein zu konvertierendes Zeilenende steht vor der Konvertierung der Zeilenenden verschwunden sind, da es sonst nicht konvertiert werden würde. Hier könnte die PHP-Funktion "htmlspecialchars" helfen, da aber im Text HTML-Tags vorkommen können kann die Funktion nicht verwendet werden (auch die HTML-Tags selber würden damit geändert). Das muss also irgendwie im Editor geleistet werden - sprich HTML-Entities "abfangen" und ersetzen.

Noch eine Anmerkung: Das Ganze sollte im Prinzip funktionieren, aber HTML Code kann manchmal recht komplex werden - insbesondere wenn der Editor nicht bekannt ist - insofern keine Garantie das der Code in jedem Fall zum gewünschten Ergebnis führt

Viele Grüße,
Eike
Eike
  Mit Zitat antworten Zitat
 


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 13:15 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