Welche Inhalte Codierung funktioniert ein Perl-CGI-Skript verwenden standardmäßig?
-
05-07-2019 - |
Frage
Ich bin Modifizieren eine reife CGI-Anwendung in Perl geschrieben und die Frage der Inhaltscodierung hat kommen. Der Browser meldet, dass der Inhalt iso-8859-1 codiert ist und die Anwendung iso-8859-1 als charset in dem HTTP-Header wird erklärt, aber immer scheint nicht zu eigentlich tun die Codierung. Keiner der verschiedenen Techniken Codierung in der Perldoc Tutorials beschrieben ( Encode , Encoding , a href = < "http://perldoc.perl.org/open.html" rel =" nofollow noreferrer „> Öffnen ) wird im Code verwendet, damit ich ein wenig verwirrt, bin, wie das Dokument tatsächlich verschlüsselt wird.
Wie bereits erwähnt, die Anwendung recht ausgereift ist und früher wahrscheinlich viele der aktuellen Codierverfahren. Kennt jemand von Alt- oder veralteten Techniken soll ich suchen? Um welche Codierung ist Perl übernehmen / default, wenn keine Richtung des Entwicklers wird?
Danke
Lösung
Standardmäßig behandelt Perl Strings als Byte-Sequenzen, so dass, wenn Sie aus einer Datei lesen und drucken, das zu STDOUT, wird es die gleiche Byte-Sequenz erzeugen. Wenn Ihre Vorlagen sind Latin-1, Ihr Ausgang wird auch Latin-1 sein.
Wenn Sie einen String in Textstring-Kontext verwenden (wie bei uc
, lc
usw.) perl übernimmt Latin-1 Semantik, es sei denn, die Zeichenfolge vor decodiert worden sind.
Andere Tipps
Perl wird nichts übernehmen, aber der Browser in der Regel auf Vermutungen, daß die Codierung beruht vorausgesetzt. Die Dokumente sind direkt ausgegeben, so wie sie geschrieben wurden, wenn keine der Codierungstechniken verwendet wird.
Sie können die charset im HTTP-Content-Type-Header angegeben werden.
Der erste Platz, den ich sehen würde, ist die Serverkonfiguration. Wenn Sie den Inhalt nicht-kodierenden Header im Programm zu setzen, haben Sie wahrscheinlich Kommissionierung des Servers Vermutung auf.
Führen Sie das Skript getrennt von dem Server zu sehen, was seine tatsächliche Leistung ist. Wenn der Server die Ausgabe von einem CGI-Programm wird (das ist NPH nicht), der Server die Header für alles behebt bis es denkt, fehlt, bevor er sich an den Client sendet.
Wenn der Browser meldet den Inhalt als iso-8859-1, vielleicht Ihr Perl-Skript die richtigen Header nicht ausgegeben hat das charset angeben?