\n 2 «br»-Converter
Alexander R.
- perl
Hallo,
ich hab mal wieder ein kleines Problem: Und zwar benutze ich eine Textdatenbank.
Dafuer brauche ich die Eingabe eines _mehrzeiligen_ Eingabefelds.
Um jedoch die Datensaetze noch gebrauchen zu koennen (wegen der eventuellen Zeilenumbruech im Feld) brauche ich einen "\n" to <br>-Converter (also alle \n, new lines zu <br>s).
Ich hab schon alle moeglichen Varianten mit regulaeren Ausdrucken ausprobiert, aber es klappt nicht! :(
also so ungefaehr:
$text_to_convert =~ s/\n/<br>/g;
Ist dringend, danke fuer Eure Hilfe!
-Alex
Hi!
$text_to_convert =~ s/\n/<br>/g;
Das ist so richtig. Das Problem muss woanders liegen. Ohne weitere Informationen kann man da aber wohl nichts sagen.
So lange
Hi!
$text_to_convert =~ s/\n/
/g;Das ist so richtig. Das Problem muss woanders liegen. Ohne weitere Informationen kann man da aber wohl nichts sagen.
So lange
Ich kann Dir hoechstens mal den Code "drumherum" geben:
sub convert_newlines {
$text_to_convert = $_[0];
$text_to_convert =~ s/\n/<br>/g;
return $text_to_convert;
}
$news = &convert_newlines($PARAM{'news'});
@news = reverse(@news);
push(@news,"$id&&$topic&&$news&&$memberid&&$short_date&&$time_var&&none");
@news = reverse(@news);
&write_news;
--------
Wenn ich jetzt im Feld "news" (siehe oben, variable $PARAM{'news'})
mehrzeiligen Text eingebe, soll das in das File geschrieben werden:
...&&zeile1<br>zeile2&&...
aber stattdessen kommt das:
...&&zeile1
<br>zeile2
<br>zeile3&&..
also die \n's werden nicht richtig entfernt! :(
oder seh ich das nur falsch? ich probiers mal kurz aus... nein geht nicht! :((
-Alex
Hi Alex!
sub convert_newlines {
$text_to_convert = $_[0];
$text_to_convert =~ s/\n/<br>/g;
return $text_to_convert;
}
Das ist, wie gesagt, i.O. Vielleicht solltest Du noch mit
my $text_to_convert;
am Anfang der Funktion die Variable lokal machen. Man sieht dann die Variable ausserhalb der Funktion nicht. Ist einfach sauberer.
$news = &convert_newlines($PARAM{'news'});
Ich nehme an, das ist die Abfrage eines CGI-Parameters, also letztlich das Auslesen eines Forumlarinhaltes?
@news = reverse(@news);
push(@news,"$id&&$topic&&$news&&$memberid&&$short_date&&$time_var&&none");
@news = reverse(@news);
Mir scheint, Du willst hier den String am Anfang von @news hinzufuegen? Schau Dir mal den Befehl unshift() an, der ist gerade dafuer gedacht. Also
unshift(@news, "$id...");
...&&zeile1<br>zeile2&&...
aber stattdessen kommt das:
...&&zeile1
<br>zeile2
<br>zeile3&&..
also die \n's werden nicht richtig entfernt! :(
Mmh... Vielleicht sind da noch andere Zeichen, naemlich \r drin? Wenn Du z.B. das Formular von einem Windows-PC aus abschickst, dann codiert der Zeilenumbrueche mit CR-LF (weisst Du was das heisst?), was den Zeichen \x0D\x0A entspricht. Ein \n ist aber nur ein \x0A. D.h. Du erhaelst eine String mit
zeile1\x0D\x0Azeile2
und nach Deiner Substitution \n (== \x0A) nach <br> hast Du
zeile1\x0D<br>zeile2
Jenachdem, mit welchem Programm das dann dargestellt wird, wird das CR (\x0D) als normaler Zeilenumbruch interpretiert und dargestellt.
Loesung: Vorher (vor dem Ersetzen mit <br>) \x0D\x0A nach \x0A umwandeln:
$text_to_convert =~ s/\x0D\x0A/\x0A/;
Ist natuerlich nur ne Vermutung, also probiers einfach mal aus.
So lange, Calocybe
Hi,
$text_to_convert =~ s/\n/<br>/g;
Das ist so richtig.
nö, ist es nicht:
s/n/<br>/sg;
Das /s am Schluß ist wichtig, weil sonst alle (tadaa) \n ignoriert werden. Idealerweise schreibst Du übrigens:
s/\015\012\015\012/<br>/sg;
wegen unterschiedlicher Umbrüche bei unterschiedlichen Betriebssystemen.
Cheatah
Moin Cheatah!
s/n/<br>/sg;
Das /s am Schluß ist wichtig, weil sonst alle (tadaa) \n ignoriert werden.
Nee, der s-Modifier bezieht sich nur darauf, ob der '.', der ja fuer ein beliebiges Zeichen steht, aber eben doch nicht ganz, auch ein \n matcht. Das tut er naemlich nur, wenn /s angegeben wird.
»» Idealerweise schreibst Du übrigens:
s/\015\012\015\012/<br>/sg;
Wir hatten das ja schon mal, Du erinnerst Dich? Wo ich noch etwas skeptisch bin ist, ob denn der Ausdruck wirklich zuerst auf ein \015\012 insgesamt losgeht, nicht dass er bei einem CRLF zwei Matches erkennt und also zwei <br>'s einsetzt. Hast Du das mal ausprobiert? Ansonsten ist das wohl wirklich die beste Variante.
So lange
Hi,
Das /s am Schluß ist wichtig, weil sonst alle (tadaa) \n ignoriert werden.
Nee, der s-Modifier bezieht sich nur darauf, ob der '.', der ja fuer ein beliebiges Zeichen steht, aber eben doch nicht ganz, auch ein \n matcht. Das tut er naemlich nur, wenn /s angegeben wird.
schuldig, Euer Ehren, da hatte ich eine erweiterte Bedeutung in Erinnerung.
s/\015\012\015\012/<br>/sg;
Wir hatten das ja schon mal, Du erinnerst Dich? Wo ich noch etwas skeptisch bin ist, ob denn der Ausdruck wirklich zuerst auf ein \015\012 insgesamt losgeht, [...]
Jepp. Dies ist aber die in de.comp.lang.perl.* empfohlene Methode (alle übrigen werden von irgendwem zu obiger korrigiert); und aufgrund der Zahl der Experten dort (sowie deren Erklärungen warum und weshalb) bin ich geneigt, das auch ohne Multi-OS-Tests zu glauben :-)
Cheatah
Danke alle zusammen :) Is ein cooles Forum hier :) Prompte Antworten! :)
Werd alles mal ausprobieren! Thx
-Alex
Es klappt wunderbar! Danke.
-Alex
Hi,
$text_to_convert =~ s/\n/
Fuer Timothy:
<?php
$converted_text=nl2br($text_to_convert);
?>
SCNR
Jan
PS: Das sagt wieder nix ueber die "bessere" Sprache aus, nur merkt man daran, dass PHP fuer das Web geschrieben wurde.
PS: Das sagt wieder nix ueber die "bessere" Sprache aus, nur merkt man daran, dass PHP fuer das Web geschrieben wurde.
1 : 1 ;-)
Timothy
P.S. Ich weiß auch, das solche Kurzpostings nicht erwünscht sind.
Trotzdem: Bitte keinen Bannstrahl gegen mich.