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