#!/usr/bin/perl # (C) 2003-2007 Willem Jan Hengeveld # Web: http://www.xs4all.nl/~itsme/ # http://wiki.xda-developers.com/ # # $Id$ # # todo: implement encode # use strict; # this script decodes urls listed on stdin. use CGI::Util qw(unescape escape); use Getopt::Long; sub usage { return <<__EOF__ Usage: urldecode [-e] __EOF__ } my $do_encode; GetOptions( "e" => \$do_encode, ) or die usage(); if ($do_encode) { encodeurl(); } else { decodeurl(); } sub encodeurl { my $base; my @params; while (<>) { s/\s+$//; if (/^\S/) { $base= $_; } elsif (/(\S+?)\s*=\s*(.*)/) { my ($key, $value)= ($1, $2); push @params, escape($key).'='.escape($value); } elsif (/^\s*(.*)/) { push @params, escape($1); } } printf("%s?%s\n", $base, join("&", @params)); } sub decodeurl { while (<>) { chomp; my ($url, $query)= /(?:(.*?)\?)?(.*)/; print $url, "\n" if ($url); for my $keyval (split("&", $query)) { if (my ($key, $value) = ($keyval =~ /(.*?)=(.*)/)) { print "\t", unescape($key), " = ", unescape($value), "\n"; } else { print "\t", unescape($keyval), "\n"; } } } }