Perl UTF8 в CGI проблемах - PullRequest
       28

Perl UTF8 в CGI проблемах

0 голосов
/ 10 марта 2019

У меня очень простой Perl-скрипт, который работает прямо на терминале, но при запуске в виде CGI-скрипта он создает мусор.Сценарий в основном берет закодированные данные HTML-сущностей и преобразует их для печати.Я пробовал все различные настройки, такие как «Кодировать», чтобы изменить вывод и установить STDOUT в режим utf8, и это не помогает.Я также попытался изменить среду CGI, чтобы посмотреть, будет ли все работать так же, как среда терминала.Все еще не повезло.

Вот скрипт

#!/usr/bin/perl 
use HTML::Entities qw(encode_entities_numeric decode_entities);
use Encode qw/encode decode/;
binmode(STDOUT, ":utf8");
#$ENV{'PERL_UNICODE'} = 'D';
#$ENV{'LANG'} = 'en_US.UTF-8';
#$ENV{'TERM'} = 'vt100';
#$ENV{'SHELL'} = '/bin/bash';
#binmode(STDOUT, ":utf8");
print "Content-type: text/html\n\n";
my $y = decode_entities("Συστήματα_&#x
391;νίχνευσης_Εισ.pd
f");
#print encode("UTF8",$y);
print $y;

Вывод на терминал чистый, как perl test.pl Тип контента: text / html

Συστήματα_Ανίχνευσης_Εισ.pdf

Но на распечатке CGI она искажена Î £ Ï… ÏƒÏ „Î · ÌμΠ± Ï„ Î ± _Î'νιÌÏ ‡ νευ σΠ· Ï‚_Î • ισ.pdf

Я вродезастрял как я не могу найти простой способ решить эту проблему.Пробовал "encode_utf8" и utf8 :: upgrade переменной, но все равно не повезло.Любой опыт здесь очень поможет!

Спасибо, Виджай

1 Ответ

5 голосов
/ 10 марта 2019

При интерпретации HTML-документа браузер должен знать кодировку.Кодировка по умолчанию согласно стандарту HTML не UTF-8.Поскольку браузер принимает неверную кодировку, он читает мусор.

Вместо этого следует явно указать кодировку, например, распечатав метатег

<meta charset="utf-8">

или включив кодировку втип контента:

Content-type: text/html; charset=utf-8

Здесь использование типа контента представляется наиболее подходящим.

...