in reply to CGI/MySQL and the vanishing \n

In order to help you, we're going to need to see the HTTP headers you send and any HTML that goes out before the file contents. Also, do the files contain plain text or HTML?

I would guess you are using content-type of text/html but are expecting newlines in the file to act as newlines in the browser. Newlines are treated as whitespace by the browser when viewing text/html content unless wrapped in PRE tags.

--- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';

Replies are listed 'Best First'.
Re: Re: CGI/MySQL and the vanishing \n
by basm101 (Acolyte) on Feb 04, 2003 at 16:21 UTC
    Yes I am using
    print "Content-type:text/html\n\n";
    I was expecting newlines in the file to act as newlines in the browser.
    What does PRE mean ? I will try puttin PRE as a tag before
    I print out $_
    cheers

      If you are displaying plain text, use "Content-type: text/plain\n\n" instead. Otherwise, I would recommend finding an HTML primer.

      --- print map { my ($m)=1<<hex($_)&11?' ':''; $m.=substr('AHJPacehklnorstu',hex($_),1) } split //,'2fde0abe76c36c914586c';
      In HTML all newlines and multiple spaces are treated as a single space for display purposes. Thus:
      <p>This will look like this does below

      This will look like this does below

      The <PRE> tag means preformatted so

      <PRE> This retains the newlines </PRE>
      This
      retains
      the
      newlines
      

      You badly need to learn some HTML. You also need to escape the HTML special characters < > "" &

      sub escapeHTML { my ( $escape, $text ) = @_; return '' unless defined $escape ; $escape =~ s/&/&amp;/g; $escape =~ s/"/&quot;/g; $escape =~ s/</&lt;/g; $escape =~ s/>/&gt;/g; # these next optional escapes make text look the same when rendere +d in HTML # without wrapping in <pre> tags if ( $text ) { $escape =~ s/\t/ /g; # tabs to 4 sp +aces $escape =~ s/( {2,})/"&nbsp;" x length $1/eg; # whitespace e +scapes $escape =~ s/\n/<br>\n/g; # newlines to +<br> } $escape =~ s/([^\000-\177])/'&#' . (sprintf "%3d", ord $1) . ';'/e +g; return $escape; }

      So you need to do something like

      print "Content-type: text/html\n\n"; print "<pre>\n"; for (@data) { print escapeHTML($_); } print '</pre>'; sub escapeHTML { ..... }

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print