]> mj.ucw.cz Git - libucw.git/blobdiff - ucw/perl/UCW/CGI.pm
UCW::CGI: Let url_param_escape() encode non-ASCII characters
[libucw.git] / ucw / perl / UCW / CGI.pm
index 7cb346391d6a1f89dd6ee78118c197df6624d3d0..a18ee8eaa568bc8bf0e866404ea21a9b06418ffa 100644 (file)
@@ -31,6 +31,7 @@ sub http_error($;@) {
 
 sub url_escape($) {
        my $x = shift @_;
+       defined $x or return;
        utf8::encode($x) if $utf8_mode;
        $x =~ s/([^-\$_.!*'(),0-9A-Za-z\x80-\xff])/"%".unpack('H2',$1)/ge;
        utf8::decode($x) if $utf8_mode;
@@ -39,6 +40,7 @@ sub url_escape($) {
 
 sub url_deescape($) {
        my $x = shift @_;
+       defined $x or return;
        utf8::encode($x) if $utf8_mode;
        $x =~ s/%(..)/pack("H2",$1)/ge;
        utf8::decode($x) if $utf8_mode;
@@ -47,19 +49,24 @@ sub url_deescape($) {
 
 sub url_param_escape($) {
        my $x = shift @_;
-       $x = url_escape($x);
+       defined $x or return;
+       utf8::encode($x) if $utf8_mode;
+       $x =~ s/([^-\$_.!*'(),0-9A-Za-z])/"%".unpack('H2',$1)/ge;
        $x =~ s/%20/+/g;
+       utf8::decode($x) if $utf8_mode;
        return $x;
 }
 
 sub url_param_deescape($) {
        my $x = shift @_;
+       defined $x or return;
        $x =~ s/\+/ /g;
        return url_deescape($x);
 }
 
 sub html_escape($) {
        my $x = shift @_;
+       defined $x or return;
        $x =~ s/&/&/g;
        $x =~ s/</&lt;/g;
        $x =~ s/>/&gt;/g;