Men kecha Debian barqarorligini yangiladim va "yangi" Perl 5.14 bilan men "yangi" CGI moduliga ham ega bo'ldim (v3.52). Oldingi versiya 3.43 edi, menimcha. Yangilash mening eski veb-shakllarimni buzdi va men "application/x-www-form-urlencoded" enktipli shakl maydonlaridan UTF-8 belgilari ikki marta dekodlanishini tushundim. "Ko'p qismli/form-ma'lumotlar" enctype bilan hamma narsa yaxshi ishlaydi.
Savol:
- Nima uchun "application/x-www-form-urlencoded" bo'lgan shakllardagi UTF-8 to'g'ri ishlanmaydi? Ikkilik ma'lumotlarni qayta ishlash uchun "ko'p qismli/forma-ma'lumotlar" yaxshiroq bo'lsa ham, ular hali ham to'g'ri dekodlanishi kerak.
Bu erda dekodlash muammosini hal qiladigan kichik sinov misoli:
#!/usr/bin/perl
use strict;
use warnings;
use utf8::all;
use CGI qw(:all -utf8);
my $q = new CGI;
sub build_form {
return q|
<form method="post" enctype="application/x-www-form-urlencoded">
<br />
Y: <input type="text" name="y" />
</form>|;
}
print $q->header( -type=>"text/html; charset=utf-8", ),
$q->start_html( -title=>"test", -encoding=>"utf-8" ),
$q->h1( $q->param( 'x' ) . " " ),
$q->start_form(),
"X: ",
$q->textfield( -name=>'x' ),
$q->end_form(), "\n\n",
$q->br(),
$q->h1( $q->param( 'y' ) . " " ),
build_form(),
$q->end_html;
PS. Menimcha, bu yangilanish UTF-8 dekodlashini buzdi. Yangilashdan so'ng avtomatik ravishda yaratilgan shakllar noto'g'ri enctype ("application/x-www-form-urlencoded") bilan ko'rinadi, chunki eskirgan yordamchi usullardan foydalanilgan (masalan, startform
o'rniga start_form
).