Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]12960[/thread]

html-kodierte Zeichen in html-Template

Leser: 1


<< >> 8 Einträge, 1 Seite
Superfrank
 2009-01-06 11:29
#117612 #117612
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
Hallo,
ihr kennt sicher die html-Kodierung für bestimmte Zeichen, z.B. das Zeichen

Code: (dl )
<


wird als

Code: (dl )
%3C


kodiert. wenn ich ein HTML-Template mit CPAN:HTML::Template lade, was z.B.

Code: (dl )
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


enthält, erscheint im html-Quellcode

Code: (dl )
document.write(unescape("<script src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'></script>"));


und die Kodierung geht "verloren". Perlscript und html-Dokument ist utf8-kodiert. Kann man bei HTML::Template irgendwie diese automatische Umkodierung verhindern?


edit: noch etwas evtl. wichtiges: Der Teil, der o.g. enthält wird mit

Code (perl): (dl )
my $footer = `cat /var/www/html/meinedomain/includes/footer.php`;


eingelesen und mit

Code (perl): (dl )
$template->param(footer => $footer);


in das HTML-Template eingefügt.

Viele Grüsse

Frank
Struppi
 2009-01-06 11:47
#117614 #117614
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Das ist eine Kodierung die üblicherweise z.b. für die URL Parameter verwendet wird, aber sie haben nichts in einem HTML Dokument verloren, dort werden Entities verwendet. Die HTML Kodierung für das kleiner als Zeichen ist, &lt;

Merkwürdig finde ich das du die JS Funktion unescape hier verwendest. Und du musst innerhalb eines script Blocks den schliessenden script Tag maskieren:
Code: (dl )
<\/script>

zumindest wenn dieser innerhalb der HTML Seite eingebaut wird.
Superfrank
 2009-01-06 12:04
#117615 #117615
User since
2006-09-05
164 Artikel
BenutzerIn
[default_avatar]
aha, den googlekram hatte mein Chef eingefügt, hihi. Ich habs auf

Code: (dl )
document.write("\<script src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'>\<\/script>" );


geändert und nun gehts. Die kodierten Zeichen kamen mir auch komisch vor, mit Zeichensätzen, utf8 und rumkodieren stehe ich leider grundsätzlich auf Kriegsfuss.

Viele Grüsse

Frank
Struppi
 2009-01-06 12:38
#117618 #117618
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Du musst nur den schliessenden script-Tag maskieren.
renee
 2009-01-06 12:47
#117621 #117621
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Superfrank+2009-01-06 10:29:12--
[...] wenn ich ein HTML-Template mit CPAN:HTML::Template lade, was z.B.[...]
edit: noch etwas evtl. wichtiges: Der Teil, der o.g. enthält wird mit

Code (perl): (dl )
my $footer = `cat /var/www/html/meinedomain/includes/footer.php`;


eingelesen und mit

Code (perl): (dl )
$template->param(footer => $footer);


in das HTML-Template eingefügt.


Warum nehmt ihr nicht 'TMPL_INCLUDE' im Template?

Wenn die includes dynamisch sind, solltet ihr CPAN:HTML::Template::Compiled nehmen. Ihr könnt die Templates in 95% der Fälle 1:1 übernehmen und es gibt die Möglichkeit von TMPL_INCLUDE_VAR.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
pq
 2009-01-06 14:19
#117625 #117625
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Struppi+2009-01-06 10:47:29--
Das ist eine Kodierung die üblicherweise z.b. für die URL Parameter verwendet wird,

richtig
Quote
aber sie haben nichts in einem HTML Dokument verloren, dort werden Entities verwendet.

naja, wieso sollte url-kodierung nichts in einem HTML-dokument verloren haben? irgendwie muss
man dort ja auch URLs kodieren können.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
pq
 2009-01-06 14:28
#117626 #117626
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
Superfrank+2009-01-06 10:29:12--
kodiert. wenn ich ein HTML-Template mit CPAN:HTML::Template lade, was z.B.

Code: (dl )
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));


enthält, erscheint im html-Quellcode

Code: (dl )
document.write(unescape("<script src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'></script>"));

das ist wirklich merkwürdig und nicht dokumentiert. vielleicht sendest du mal einen bugreport an den autor?
hier bei mir ist es nicht kaputt, wie du im folgenden siehst:
Code: (dl )
1
2
3
4
5
6
7
8
perl -wle'
use HTML::Template;
my $ht = HTML::Template->new(scalarref => \<<EOM
document.write(unescape("%3Cscript ... %3C/script%3E"));
EOM
);
print $ht->output'
document.write(unescape("%3Cscript ... %3C/script%3E"));
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Struppi
 2009-01-06 16:15
#117627 #117627
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
pq+2009-01-06 13:19:54--
Struppi+2009-01-06 10:47:29--
Das ist eine Kodierung die üblicherweise z.b. für die URL Parameter verwendet wird,

richtig
Quote
aber sie haben nichts in einem HTML Dokument verloren, dort werden Entities verwendet.

naja, wieso sollte url-kodierung nichts in einem HTML-dokument verloren haben? irgendwie muss
man dort ja auch URLs kodieren können.
Das ist Haarspalterei, die HTML Attribute gehören zwar irgendwie zum Dokument, aber die Aussage stand im Kontext zum Ausgangposting.
<< >> 8 Einträge, 1 Seite



View all threads created 2009-01-06 11:29.