bernd: Interpretation verhindern

Hallo erstmal,
ich versuche gerade, mir einen kleinen Editor zu basteln, mit dem ich meine Webseiten online ohne FTP via Browser verwalten kann. Dabei habe ich ein seltsames Problem: Besonders bei Perl-Scripts, die ihrerseits HTML ausgeben, kommt es immer wieder dazu, dass der Browser versucht, die enthaltenen Tags zu interpretieren (gibt einen lustigen Eintopf aus Code-Schnipseln ;-) Mir fehlt an entscheidender Stelle irgendwas, um dieses Verhalten zu unterdrücken.
Grundsätzlich ist mein Ansatz so:

open (OUT, "$outfile");
my @code=<OUT>;
(...)

Der Code soll zwecks Weiterverarbeitung in ein Formular:

print <<"hier";
(...)
<form>
(...)
<textarea> @code </textarea>
(...)
hier

Tja- beim Versuch, den Code im Textarea anzuzeigen, bricht das erwähnte Chaos aus- hat wer von euch einen Tipp, wie man den Browser davon abbringen kann, den Code an dieser Stelle zu interpretieren?

Greetings
bernd

  1. Tag bernd.

    Besonders bei Perl-Scripts, die ihrerseits HTML ausgeben, kommt es immer wieder dazu, dass der Browser versucht, die enthaltenen Tags zu interpretieren (gibt einen lustigen Eintopf aus Code-Schnipseln ;-) Mir fehlt an entscheidender Stelle irgendwas, um dieses Verhalten zu unterdrücken.

    Entweder du wandelst alle "<" in "&lt;" zu Fuß um oder du benutzt HTML::Entities.

    Siechfred

    1. Moin Siechfred,
      werd mal checken, ob mein Provider das Modul im Angebot hat- THX so far. Inzwischen ist mir dann doch das Allerschlichteste auch noch eingefallen: Den Code als Kommentar ausgeben- muss man zwar das eben reingebastelte gleich wieder escapen, aber was richtig kurzes scheint es wohl eh nicht zu geben...

      Gruß & Dank
      bernd

      1. Tag bernd.

        werd mal checken, ob mein Provider das Modul im Angebot hat- THX so far. Inzwischen ist mir dann doch das Allerschlichteste auch noch eingefallen: Den Code als Kommentar ausgeben- muss man zwar das eben reingebastelte gleich wieder escapen, aber was richtig kurzes scheint es wohl eh nicht zu geben...

        Wieso, sowas geht auf jeden Fall:

        #!/usr/bin/perl -w  
        use strict;  
        use warnings;  
        use CGI::Carp qw(fatalsToBrowser);  
        use CGI;  
          
        my @arr = ("<h1>Test</h1>","<h2>Ausgabe</h2>","<p>Testtext</p>");  
        my $cgi = new CGI;  
          
        $cgi->default_dtd('-//W3C//DTD HTML 4.01 Transitional//EN');  
        print $cgi->header(-type    =>'text/html',  
                           -expires =>'+1h'),  
              $cgi->start_html(),  
              $cgi->div(join("<br>", map(ersetze($_),@arr))),  
              $cgi->end_html();  
          
        sub ersetze {  
          $_ =~ s/</&lt;/g;  
          return $_;  
        }
        

        Quelltext der Ausgabe:

        <div>  
          &lt;h1>Test&lt;/h1><br>  
          &lt;h2>Ausgabe&lt;/h2><br>  
          &lt;p>Testtext&lt;/p>  
        </div>
        

        So soll es doch sein, oder?

        Siechfred

        1. Mensch Siechfred,
          komplettes Listing- Respekt ;-) Und du hast völlig recht: So soll es sein- das ist auf jeden Fall die programmiertechnisch saubere Lösung. Da traue ich mich kaum zu sagen, dass der Heimwerker-Kunstgriff mit dem Kommentar für mich aber doch einen Vorteil hat: Er fügt nur am Anfang und Ende ein paar Zeichen ein und baut nicht gleich den gesamten Code um- sehr einfach zu escapen, das (auch wenn es nicht so professionell aussieht...).

          THX anyway
          bernd