Interpretation verhindern
bernd
- perl
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
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 "<" zu Fuß um oder du benutzt HTML::Entities.
Siechfred
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
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/</</g;
return $_;
}
Quelltext der Ausgabe:
<div>
<h1>Test</h1><br>
<h2>Ausgabe</h2><br>
<p>Testtext</p>
</div>
So soll es doch sein, oder?
Siechfred
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