#-------------------------------------------------------------------------------------
# url_encoding -- dekodiert daten, die im format
#                 application/x-www-form-urlencoded
#                 vorliegen
#-------------------------------------------------------------------------------------
package      URLEncoding;
require      Exporter;
@ISA       = qw(Exporter);
@EXPORT    = qw(template_ausgabe url_encode url_decode parse_cgi);

#-----------------------------------------------------------
# template_ausgabe() gibt Text mit Hilfe eines Templates aus
#-----------------------------------------------------------
sub template_ausgabe {

  my $templatefile = shift;
  my $text = shift;
  my $zeile1 = "";

  # Dateien öffnen
  if (!open (TEMPLATEFILE, "< $templatefile")) {
    print "Die Templatedatei $templatefile wurde nicht gefunden";
    return 0; # habe fertig!
  }
  
  while ($zeile1 = <TEMPLATEFILE>) {
    print $zeile1;
    if ($zeile1 =~ /\<!-- \#BeginEditable \"Inhalt\" --\>/i) {
      print "$text\n";
    }
  }
  return 1;
  
}

#-----------------------------------------------------------
# url_encode() verschluesselt Sonderzeichen
#-----------------------------------------------------------
sub url_encode {

  my $input = shift;
  
  $input =~ s/[^A-Za-z0-9]/"%" . hex($1)/eg;
  $input =~ s/\s/+/g;
  
  return $input;
  
}

#-----------------------------------------------------------
# url_decode() entschluesselt Sonderzeichen
#-----------------------------------------------------------
sub url_decode {

  my $input = shift;
  
  $input =~ s/\+/ /g;
  $input =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
  
  return $input;
  
}

#-----------------------------------------------------------
# parse_cgi liest einen buffer ein ("n=w&n=w&...")
# und produziert ein hash
# es decodiert auch url-daten on-the-fly
#-----------------------------------------------------------
sub parse_cgi {

  my $input = shift;
  
  my %FORM = ();
  my (@PAIRS,$pair) = ((),"");
  my ($key,$value) = "";
  
  @PAIRS = split(/&/,$input);
  foreach $pair (@PAIRS) 
  { ($key, $value) = split(/=/,$pair);
    $key   = &url_decode($key);
    $value = &url_decode($value);
    if (defined $FORM{$key})
    { $FORM{$key} .= "\0" . $value;
    }
    else
    { $FORM{$key} = $value;
    }

  }
  
  return %FORM;
  
}

1;
   

