URIs kodieren und dekodieren mit URI::Escape

Veröffentlicht von Thomas Fahle am (Permalink)

Bei einer URL- oder URI-Kodierung geht es darum, bestimmte Zeichen in einer URL (URI) durch eine oder mehrere Gruppen aus speziellen anderen Zeichen zu ersetzen.

URI::Escape von Gisle Aas erleichtert das Kodieren bzw. Dekodieren von URIs erheblich und bietet neben UTF8-Unterstützung auch Sicherheitsfeatures.

Beispiel: URI kodieren und dekodieren

Die beiden Subroutinen uri_escape() und uri_unescape(), die automatisch von URI::Escape exportiert werden, übernehmen die Arbeit.

#!/usr/bin/perl
use warnings;
use strict;
use URI::Escape;

my $klartext = qq~"Dies ist Klartext mit Sonderzeichen!"  10% mehr \$ ... ~;
my $encoded  = uri_escape($klartext);
my $decoded  = uri_unescape($encoded);

print "Encoded: $encoded \n";
print "Decoded: $decoded \n";

Das Programm erzeugt folgende Ausgabe:

Encoded: %22Dies%20ist%20Klartext%20mit%20Sonderzeichen!%22%20%2010%25%20mehr%20%24%20...%20 
Decoded: "Dies ist Klartext mit Sonderzeichen!"  10% mehr $ ...  

UTF8

uri_escape_utf8() kann UTF8 Strings kodieren, uri_unescape() kann diese ebenfalls dekodieren.

CGI-Formulare

Das Modul CGI kodiert bzw. dekodiert Formulardaten automatisch richtig. Verwenden Sie daher CGI und nicht URI::Escape.

Beispiel: GET-Query mit URI::Escape zusammensetzen

#!/usr/bin/perl
use strict;
use warnings;

use URI::Escape;

# Basis URI zum Formular

my $url = 'http://irgendwo.tld/cgi-bin/formular.pl';

# Parameter und Werte
my $param1 = 'vorname';
my $param2 = 'nachname';

my $value1 = 'Max';
my $value2 = 'Müller';

# Get Query schrittweise zusammenbauen

my $get_query = '';
$get_query .= $url;
$get_query .= '?';

$param1 = uri_escape($param1);
$get_query .= $param1;
$get_query .= '=';

$value1 = uri_escape($value1);
$get_query .= $value1;

$get_query .= '&';

$param2 = uri_escape($param2);
$get_query .= $param2;
$get_query .= '=';
$value2 = uri_escape($value2);
$get_query .= $value2;


print "GET Query: $get_query\n";

Das Programm erzeugt folgende Ausgabe:

GET Query: http://irgendwo.tld/cgi-bin/formular.pl?vorname=Max&nachname=M%C3%BCller

Beispiel: GET-Query mit CGI zusammensetzen

Zum Vergleich die selben Schritte wie oben, jedoch mit CGI.

#!/usr/bin/perl
use strict;
use warnings;

use CGI;

my $q = new CGI;


# Basis URI zum Formular

my $url = 'http://irgendwo.tld/cgi-bin/formular.pl';

# Parameter und Werte
my $param1 = 'vorname';
my $param2 = 'nachname';

my $value1 = 'Max';
my $value2 = 'Müller';

# Get Query schrittweise zusammenbauen

my $get_query = '';
$get_query .= $url;
$get_query .= '?';

$param1 = $q->escape($param1);
$get_query .= $param1;
$get_query .= '=';

$value1 = $q->escape($value1);
$get_query .= $value1;

$get_query .= '&';

$param2 = $q->escape($param2);
$get_query .= $param2;
$get_query .= '=';
$value2 = $q->escape($value2);
$get_query .= $value2;


print "GET Query: $get_query\n";

Das Programm erzeugt die selbe Ausgabe wie oben:

GET Query: http://irgendwo.tld/cgi-bin/formular.pl?vorname=Max&nachname=M%C3%BCller

Tabellarische Übersicht URL Escape Codes

Zeichen Escape Code
Space %20
" %22
! %23
. %2E
, %2C
< %3C
> %3E
# %23
% %25
( %28
) %29
{ %7B
} %7D
| %7C
\ %74
^ %5E
~ %7E
[ %5B
] %5D
' %60
; %3B
/ %2F
? %3F
: %3A
@ %40
= %3D
& %26
* %2A

 

Siehe auch

Weitere Posts