LINUX.ORG.RU

[Perl] CGI Upload + utf8

 


0

0

Надо немного: поддержку юникода в регулярных выражениях

В примере ниже регулярные выражения работают хорошо, и при выводе странички никаких проблем нет, но при передаче файла возникает ошибка: utf8 "\xXX" does not map to Unicode at (eval 11) line 5

#!/usr/bin/perl -w
use strict;
use encoding 'utf8';
use Encode qw(_utf8_on);
use CGI;

binmode(STDIN, ':bytes');

my $cgi = new CGI;

foreach ($cgi->param()) {
my $s = $cgi->param($_);
_utf8_on($s);
$cgi->param($_, $s);
}

if (defined($cgi->param('submit'))) {
my $file = $cgi->param('file');
my ($fname) = $file =~ /([^\\\/]+)$/;
open(F, ">/tmp/$fname");
binmode(F);
foreach (<$file>) {
print F $_;
}
close(F);
print <<HTML;
Content-Type: application/xhtml+xml; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head><title></title></head>
<body>
<h1>$fname</h1>
</body>
</html>
HTML
}
else {
print <<HTML;
Content-Type: application/xhtml+xml; charset=UTF-8

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">;
<html xmlns="http://www.w3.org/1999/xhtml">;
<head><title></title></head>
<body>
<form method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" name="submit"/>
</form>
</body>
</html>
HTML
}

Добавление прагмы use open IN => ':encoding(utf8)' частично решает проблему, но в error.log пишутся предупреждения вроде 'Wide character in print at (eval 3) line 85'

Существет ли решение проблемы?

PS:
Гугл посещал.

А что, правда никто не знает? :(

anterior
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.