Calocybe: \n 2 «br»-Converter

Beitrag lesen

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