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