#!/usr/bin/env perl use strict; use warnings; use URI 5.17; use URI::Escape 5.17; print "OS[$^O] perl[$^V]\n"; # uri_escape() gives %20 my $str = '2022-12-18 12:19:57'; print "\$str[$str]\n"; my $esc_str = uri_escape($str); print "\$esc_str[$esc_str]\n"; # query_param() gives + { my $u = URI->new('/api/Data', 'http'); print 'URI init=[', $u->as_string(), "]\n"; $u->query_param(t1 => '2022-12-18 12:19:57'); print 'URI raw_param=[', $u->as_string(), "]\n"; } # If escaped string is used, %20 -> %2520 { my $u = URI->new('/api/Data', 'http'); $u->query_param(t1 => $esc_str); print 'URI esc_param=[', $u->as_string(), "]\n"; } # If string escaped in situ, still %20 -> %2520 { my $u = URI->new('/api/Data', 'http'); $u->query_param(t1 => uri_escape('2022-12-18 12:19:57')); print 'URI in_situ_esc_param=[', $u->as_string(), "]\n"; } # You can modify the query string to change + to %20 { my $u = URI->new('/api/Data', 'http'); $u->query_param(t1 => '2022-12-18 12:19:57'); my $query = $u->query(); $query =~ s/\+/%20/g; $u->query($query); print 'URI long_re_sub_param=[', $u->as_string(), "]\n"; } # Perl 5.14 and later has the /r modifier: # use for a more succinct version of the above # with identical output. { my $u = URI->new('/api/Data', 'http'); $u->query_param(t1 => '2022-12-18 12:19:57'); $u->query($u->query() =~ s/\+/%20/gr); print 'URI rmod_re_sub_param=[', $u->as_string(), "]\n"; }