URIs kodieren und dekodieren mit URI::Escape

| | Kommentare (0)

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

Jetzt kommentieren

Über diese Seite

Diese Seite enthält einen einen einzelnen Eintrag von Thomas Fahle vom 26.06.08 22:30.

Dateien rückwärts lesen ist der vorherige Eintrag in diesem Blog.

Perl Training Israel - Perl Test Automation Tips (nicht nur) für Einsteiger ist der nächste Eintrag in diesem Blog.

Aktuelle Einträge finden Sie auf der Startseite, alle Einträge in den Archiven.

Blog Roll

Powered by

Powered by Movable Type 5.2.10

Creative Commons-Lizenz

Creative Commons License
Dieses Weblog steht unter einer Creative Commons-Lizenz.