our @EXPORT = qw(&html_escape &url_escape &url_deescape &url_param_escape &url_param_deescape &self_ref &self_form &http_get);
our @EXPORT_OK = qw();
+our $utf8_mode = 0;
+
### Escaping ###
sub url_escape($) {
my $x = shift @_;
+ utf8::encode($x) if $utf8_mode;
$x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff])/"%".unpack('H2',$1)/ge;
+ utf8::decode($x) if $utf8_mode;
return $x;
}
sub url_deescape($) {
my $x = shift @_;
+ utf8::encode($x) if $utf8_mode;
$x =~ s/%(..)/pack("H2",$1)/ge;
+ utf8::decode($x) if $utf8_mode;
return $x;
}
my $main_arg_table;
my %raw_args;
+sub parse_raw_args_ll($$) {
+ my ($arg, $s) = @_;
+ $s =~ s/\r\n/\n/g;
+ $s =~ s/\r/\n/g;
+ utf8::decode($s) if $utf8_mode;
+ push @{$raw_args{$arg}}, $s;
+}
+
sub parse_raw_args($) {
my ($s) = @_;
$s =~ s/\s+//;
$_ = $2;
s/\+/ /g;
s/%(..)/pack("H2",$1)/eg;
- s/\r\n/\n/g;
- s/\r/\n/g;
- $raw_args{$arg} = $_;
+ parse_raw_args_ll($arg, $_);
}
}
-sub parse_raw_args_ll($$) {
- my ($arg, $s) = @_;
- $s =~ s/\r\n/\n/g;
- $s =~ s/\r/\n/g;
- $raw_args{$arg} = $s;
-}
-
sub parse_multipart_form_data();
sub init_args() {
for my $arg (keys %$args) {
my $a = $args->{$arg};
defined($raw_args{$arg}) or next;
- $_ = $raw_args{$arg};
- $a->{'multiline'} or s/(\n|\t)/ /g;
- s/^\s+//;
- s/\s+$//;
- if (my $rx = $a->{'check'}) {
- if (!/^$rx$/) { $_ = $a->{'default'}; }
- }
+ for (@{$raw_args{$arg}}) {
+ $a->{'multiline'} or s/(\n|\t)/ /g;
+ s/^\s+//;
+ s/\s+$//;
+ if (my $rx = $a->{'check'}) {
+ if (!/^$rx$/) { $_ = $a->{'default'}; }
+ }
- my $v = $a->{'var'};
- my $r = ref($v);
- if ($r eq 'SCALAR') {
- $$v = $_;
- } elsif ($r eq 'ARRAY') {
- push @$v, $_;
+ my $v = $a->{'var'};
+ my $r = ref($v);
+ if ($r eq 'SCALAR') {
+ $$v = $_;
+ } elsif ($r eq 'ARRAY') {
+ push @$v, $_;
+ }
}
}
}