Ну, это не специфично для Perl. Веб-браузер необходим для URI-кодирования значений при отправке.
Вы можете использовать стандартный модуль use CGI
для декодирования полей формы для вас - это определенно рекомендуется, так как он позаботится о всех видах крайних случаев для вас, и также может использоваться, если вы решите преобразовать в mod_perl
модуль позже.
Если вы запускаете CGI-скрипт, я также настоятельно рекомендую иметь -T
в строке shebang
(#!/usr/bin/perl -T
) и use strict;
, чтобы помочь отловить вещи, которые могут в противном случае легко использовать в Интернете.
#!/usr/bin/perl -T
use strict;
use CGI;
my $q = CGI->new;
print "Content-Type: text/html\n\n";
print "<html><body><h1> Field FOO contains: ", $q->param('FOO'),
"</h1></body></html>\n\n";
→
<html><body><h1> Field FOO contains: привет </h1></body></html>
Вы можете использовать строку ->param(
)
для чтения различных полей формы; он будет обрабатывать GET и POST прозрачно и декодировать строки в кодировке URI.
«Не рекомендуемый, трудный путь» - использовать выражение:
my ($name, $value) = split /\=/, $part;
$value =~ s/\+/ /g;
$value =~ s/(\%[0-9a-fA-F][0-9a-fA-F])/ (chr (hex $1)) /gex;