$form_data = join('&', map { s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; $form_data{$_} =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; "$_=$form_data{$_}"; } sort keys %form_data);