-> (REGEXP) s/\n/<br>/g; geht nicht!
Aquariophile
- perl
0 xNeTworKx0 Christian Kruse
Hallo
$text ist das was aus einer <textarea> übermittelt wird,
und enthält Zeilenumrbüche.
$text=~s/\n/<br>/g;
greift irgendwie voll nicht.
Ganz duster erinnere ich mich daran,
dass mir mal irgendjemand eine REGEXP zeigte,
wo mit irgendwo seiner komischen konstruktion von 10 12 10 12
das \n durch <br> ersetzt wurde,
weil aber leider nicht mehr genau wie das ausschaute.
Bitte um Hilfe!
Danke!
Aquariophile
PS.: Neeeeeeeeeeeeeeee, das ist _kein_ Aprilscherz!
Hallo,
$text=~s/\n/<br>/g;
ist an und für sich richtig. Der Fehler liegt sicher wo anders, aber ohne Quelltext ist das auch schwer herauszufinden.
Hi !
Also ich meine, dass das eigentlich klappen müsste.
Aber ich habe noch eine kompliziertere Variante,
die auch klappen muss:
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Moin!
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Aeh... wie bitte? Kannst Du Perl ueberhaupt? Weisst Du, was das da macht? Wie auch immer, mit diesem Problem hat das ja nun rein gar nichts zu tun.
So long
--
Perhaps the designers of CSS1 thought that the "visualists" should be given toys to play with so that they will stop playing with adults' tools (HTML).
-- http://www.cs.tut.fi/~jkorpela/styles/harmful.html
Moin!
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Hier die Erklärung:
Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
Variable $test nach Wagenrücklauf und ersetzt ihn in ein
HTML-Zeilenumbruch (<br>).
foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.
$tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
wegen chomp ($_) angehängt wird und zusätzlich ein <br>.
Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
ein <br>.
MS
Hoi,
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Hier die Erklärung:
Phantasie hast du ja ;-)
Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
Variable $test nach Wagenrücklauf und ersetzt ihn in ein
HTML-Zeilenumbruch (<br>).
Nein. Nicht zwingend. Das kommt darauf an, wie die Zeilenumbrueche kodiert
sind.
foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.
$tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
wegen chomp ($_) angehängt wird und zusätzlich ein <br>.
Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
ein <br>.
Nein. '$test' ist kein Array, sondern ein Skalar. Was du moechtest, koennte
man vielleicht etwa so erreichen:
foreach(split /\n/,$text) {
$txt .= "$_<br>";
}
Was aber absolut unnoetig ist, weil ein s///sg reicht.
Gruesse aus dem schoenen LH,
c.j.k
Re!
Im Chat wurde ich darauf hingewiesen, dass das vielleicht auch nur eine Aprilverarschung ist, aber nach Deiner neuerlichen Antwort scheint mir dass dann doch nicht der Fall zu sein. Ich wuerde Dir auf jeden Fall empfehlen, mal einen Einfuehrungskurs in Perl zu machen.
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Das laesst sich uebrigens kuerzer schreiben:
chomp($test);
$tmp_test = ($test += '<br>');
Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
Variable $test nach Wagenrücklauf und ersetzt ihn in ein
HTML-Zeilenumbruch (<br>).
Zumindest die Zeilenumbrueche, die vom aktuellen System verwendet werden, aber nicht unbedingt die, die ueber's Internet gesendet werden. Gerade um letzteres ging es hier aber. Das wichtigste aber ist, wenn es Zeilenumbrueche ersetzt, dann *alle*.
foreach ist ein Befehl, der jede Zeile pro durchlauf in $_ kopiert.
Das ist kompletter Quatsch. foreach setzt $_ (oder eine andere Variable, die Du angibst) nacheinander als Alias fuer jedes Element einer Liste. Mit irgendwelchen Zeilen hat das nichts zu tun; Kopien werden auch keine angelegt.
$tmp_test ist eine Variable, an die Ständig die Zeile $_ ohne Wagenrücklauf
wegen chomp ($_) angehängt wird und zusätzlich ein <br>.
chomp verhindert nicht, dass eine Variable Zeilenumbrueche enthalten kann, es sei denn, diese stehen zufaellig immer am Ende (was aber vor allem in diesem Beispiel (Textarea) ueberhaupt nicht gegeben ist).
Im Grunde ersetzt meine Routine also auch alle Zeilenumbrüche in
ein <br>.
Definitiv nicht.
So long
Hoi,
Ich wuerde Dir auf jeden Fall empfehlen, mal einen
Einfuehrungskurs in Perl zu machen.
Dito.
my $tmp_test="";
foreach ($test)
{
chomp ($_);
$tmp_test = $tmp_test + $_ + "<br>";
}
$test = $tmp_test;
Das laesst sich uebrigens kuerzer schreiben:
chomp($test);
$tmp_test = ($test += '<br>');
Nein, das entspricht leider nicht dem, was MS geschrieben hat. Das
folgende waere ungefaehr dasselbe:
$tmp_test = $test + 0;
;-))
Die Zeichenfolge $text=~s/\n/<br>/g; durchsucht die
Variable $test nach Wagenrücklauf und ersetzt ihn in ein
HTML-Zeilenumbruch (<br>).
Zumindest die Zeilenumbrueche, die vom aktuellen System verwendet
werden, aber nicht unbedingt die, die ueber's Internet gesendet
werden. Gerade um letzteres ging es hier aber. Das wichtigste aber
ist, wenn es Zeilenumbrueche ersetzt, dann *alle*.
Dazu auch
http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm
*scnr*
Gruesse aus dem schoenen LH,
c.j.k
Moin Christian!
Nein, das entspricht leider nicht dem, was MS geschrieben hat. Das
folgende waere ungefaehr dasselbe:
$tmp_test = $test + 0;
Ich Idiot! Jetzt hab ich noch nicht mal diesen Anfaengerfehler gesehen! Naja, ich wuerde diesen Code sowieso nicht verwenden... ;-)
So long
--
Alle Verallgemeinerungen sind falsch.
Hoi,
$text ist das was aus einer <textarea> übermittelt wird,
und enthält Zeilenumrbüche.
$text=~s/\n/<br>/g;
greift irgendwie voll nicht.
Kein Wunder. Denk' mal darueber nach, wofuer der Modifier 's' ist (s///s).
perldoc perlre sollte helfen.
Ganz duster erinnere ich mich daran,
dass mir mal irgendjemand eine REGEXP zeigte,
wo mit irgendwo seiner komischen konstruktion von 10 12 10 12
das \n durch <br> ersetzt wurde,
weil aber leider nicht mehr genau wie das ausschaute.
Du meinst wohl
$text =~ s/\015\012|\012|\015/<br />/sg;
Der RegEx hat aber eine andere Intention: er soll Plattformuebergreifendes
RegEx-Handling bieten. Siehe dazu auch
http://aktuell.de.selfhtml.org/artikel/cgiperl/zeilenumbruch/index.htm
Gruesse aus dem schoenen LH,
c.j.k