ZEilenumbrüche in <br> umwandeln?
Zaap
- perl
0 Norbert Kölln
Hi
Ich hab ein Redaxionssystem programmiert, bei dem es auch "startseitenkurznews" gibt, also kurze news die direkt auf der startseite gespeichert werden. Die Startseitennews werden alle zusammen in einer datei gespeichert und die einzelnen daten per <> getrennt also sieht eine beispielzeile wie folgt aus:
Titel<>Text<>Verfasser<>Datum o.ä.
Die news werden zeile für zeile aufgerufen; das script geht davon aus das eine zeile = ein newseintrag ist, wie es im normalfall auch ist.
Wenn jetzt aber ein Redakteur im Text einen Zeilenumbruch haben will, drückt er wie jeder normaldenkende "ENTER". Dadurch wird das ganze Zeilensystem durcheinandergeworfen; das HTML-<br> muss also her.
Ich habe shcon in dem script der das alles speichert das folgende SUB eingebaut:
sub brmaker
{
$br = $_[0];
$br =~ s/\n/<br>/g;
return $br;
}
Das sollte eigentlich die \n mit <br> ersetzen.
Nun gibt es das problem, dass die <br> zwar gesetzt werden, auch an den richtigen Stellen, die \n (also zeilenumbrüche) jedoch nicht entfernt werden, soll heißen das ganze bringt zwar zeilenumbrüche aber das System kannste trotzdem vergessen.
Wer kann mir helfen? Ich denke das problem ist klar.
CYa
Zaap
Moin, moin!
So ein Problem hatte ich auch schon. Meine Lösung sähe für Dich so aus: $br =~ s/\r\n/<br>/g;
Alles klar?
Norbert
Hallo,
So ein Problem hatte ich auch schon. Meine Lösung sähe für Dich so aus: $br =~ s/\r\n/<br>/g;
Alles klar?
nee, was ist denn, wenn da nur '\r' drin steht bzw. '\n\r'?
Dann triffst Du das nicht.
Wie wäre es mit
$br =~ s/\r|\n/<br>/g;
Hallo, Reiner,
$br =~ s/\r\n/<br>/g;
nee, was ist denn, wenn da nur '\r' drin steht bzw. '\n\r'?
Dann triffst Du das nicht.
\n\r ist kein "offizieller" Abschluss für ein Zeilenende.
$br =~ s/\r|\n/<br>/g;
Damit wird aber \r\n zu <br><br> ersetzt. (\r\n|\r|\n) würde Windows-, Mac- und Unix-Zeilenumbrüche ersetzen. Die Reihenfolge der Alternativen ist ebenso wichtig, (\r|\n|\r\n) würde zuviele <br> ausgeben.
(Oder irre ich? ;))
Mathias
Halihallo zusammen
$br =~ s/\r\n/<br>/g;
nee, was ist denn, wenn da nur '\r' drin steht bzw. '\n\r'?
Dann triffst Du das nicht.
\n\r ist kein "offizieller" Abschluss für ein Zeilenende.
$br =~ s/\r|\n/<br>/g;
Damit wird aber \r\n zu <br><br> ersetzt. (\r\n|\r|\n) würde Windows-, Mac- und Unix-Zeilenumbrüche ersetzen. Die Reihenfolge der Alternativen ist ebenso wichtig, (\r|\n|\r\n) würde zuviele <br> ausgeben.
\n ist System-/Implementationsabhängig! (\n kann \015, \012 oder gar \015\012 bedeuten)
=>
$br =~ s/\015\012|\015|\012/<br />/g;
funktioniert überrall.
Eine neue Zeile wird durch CR, LF oder CRLF eingeführt (oder besser beendet).
CR = \015
LF = \012
wenn man's genau nimmt. \r und \n sind _immer_ mit Vorsicht zu geniessen. Ich könnte mir jedoch vorstellen, dass deine Lösung auf allen Systemen/Impl. funktioniert, aber "exakt/treffend" ist es dennoch nicht :-)
Viele Grüsse
Philipp
Hallo, Philipp,
$br =~ s/\r|\n/<br>/g;
Damit wird aber \r\n zu <br><br> ersetzt. (\r\n|\r|\n) würde Windows-, Mac- und Unix-Zeilenumbrüche ersetzen. Die Reihenfolge der Alternativen ist ebenso wichtig, (\r|\n|\r\n) würde zuviele <br> ausgeben.
\n ist System-/Implementationsabhängig! (\n kann \015, \012 oder gar \015\012 bedeuten)
Auf welchem System würde "\n" in der RegExp-Angabe bzw. in einem String vom Perl-Interpreter als \015 oder \015\012 interpretiert? Als was wird dann \r gedeutet...? Das interessiert mich.
Eine neue Zeile wird durch CR, LF oder CRLF eingeführt (oder besser beendet).
Das ist mir bekannt, aber bisher dachte ich, dass \n systemübergreifend \012 bedeutet... Ist die Zuordnung \r => \015 und \n => \012 nicht plattformübergreifend gleich, es handelt sich doch um den Perl-Interpreter, der den Alias in seinen Dezimalwert uminterpretiert?
wenn man's genau nimmt. \r und \n sind _immer_ mit Vorsicht zu geniessen. Ich könnte mir jedoch vorstellen, dass deine Lösung auf allen Systemen/Impl. funktioniert, aber "exakt/treffend" ist es dennoch nicht :-)
Nun gut, in erster Linie entwickelt man für die bekannte Zielplattform, in zweiter Linie sollte ein Perlscript natürlich plattformübergreifend funktionieren.
Mit \r\n ("Windows-Format") und \n für Unix (Linux) bin ich bisher immer problemlos gefahren...
Grüße,
Mathias
Halihallo molily
$br =~ s/\r|\n/<br>/g;
Damit wird aber \r\n zu <br><br> ersetzt. (\r\n|\r|\n) würde Windows-, Mac- und Unix-Zeilenumbrüche ersetzen. Die Reihenfolge der Alternativen ist ebenso wichtig, (\r|\n|\r\n) würde zuviele <br> ausgeben.
\n ist System-/Implementationsabhängig! (\n kann \015, \012 oder gar \015\012 bedeuten)
Auf welchem System würde "\n" in der RegExp-Angabe bzw. in einem String vom Perl-Interpreter als \015 oder \015\012 interpretiert? Als was wird dann \r gedeutet...? Das interessiert mich.
\r meistens CR, ausser Mac => LF
\n bedeutet eigentlich "alles"
s. Orlandos Link.
Eine neue Zeile wird durch CR, LF oder CRLF eingeführt (oder besser beendet).
Das ist mir bekannt, aber bisher dachte ich, dass \n systemübergreifend \012 bedeutet... Ist die Zuordnung \r => \015 und \n => \012 nicht plattformübergreifend gleich, es handelt sich doch um den Perl-Interpreter, der den Alias in seinen Dezimalwert uminterpretiert?
Ja. Der Einfachheit halber ist \n bei Perl _immer_ das Zeilenende, was das dann bedeutet CRLF, CR oder LF ist eben OS/Impl. abhängig.
wenn man's genau nimmt. \r und \n sind _immer_ mit Vorsicht zu geniessen. Ich könnte mir jedoch vorstellen, dass deine Lösung auf allen Systemen/Impl. funktioniert, aber "exakt/treffend" ist es dennoch nicht :-)
Nun gut, in erster Linie entwickelt man für die bekannte Zielplattform, in zweiter Linie sollte ein Perlscript natürlich plattformübergreifend funktionieren.
Mit \r\n ("Windows-Format") und \n für Unix (Linux) bin ich bisher immer problemlos gefahren...
\r\n auf Win sollte doch eigentlich in CRCRLF umgewandelt werden, oder?
Naja, wie auch immer, mit \015\012|\015|\012 fährt man auf jeden Fall immer gut (ja, Mac-Systeme gibt's auch noch *g*) :-)
Viele Grüsse
Philipp
PS: Danke für den treffenden Link, Orlando.