Dies ist die official FAQ answer minus nachfolgende Bearbeitungen. Diese %
Codierungen behandeln reservierte Zeichen in URIs, wie in RFC 2396, Section 2 beschrieben. Diese Codierung ersetzt das reservierte Zeichen durch die hexadezimale Darstellung der Zeichennummer aus der US-ASCII-Tabelle. Zum Beispiel wird ein Doppelpunkt, :
, %3A
.
In CGI-Skripten müssen Sie sich keine Gedanken über die Dekodierung von URIs machen, wenn Sie CGI.pm verwenden. Sie sollten den URI weder auf dem Hinweg noch auf dem Weg selbst bearbeiten müssen.
Wenn Sie eine Zeichenfolge selbst codieren müssen, denken Sie daran, dass Sie niemals versuchen sollten, eine bereits erstellte URI zu codieren. Sie müssen die Komponenten getrennt entkommen und dann zusammenfügen. Um eine Zeichenfolge zu codieren, können Sie das Modul URI::Escape verwenden. Die uri_escape
Funktion gibt die Escape-Sequenzen:
my $original = "Colon : Hash # Percent %";
my $escaped = uri_escape($original);
print "$escaped\n"; # 'Colon%20%3A%20Hash%20%23%20Percent%20%25'
die Zeichenfolge entschlüsseln, verwenden Sie die uri_unescape Funktion:
my $unescaped = uri_unescape($escaped);
print $unescaped; # back to original
Wenn Sie es selbst tun wollen, geben Sie einfach die reservierten Zeichen ersetzen müssen mit ihrem Kodierungen. Eine globale Substitution ist eine Möglichkeit, es zu tun:
# encode
$string =~ s/([^^A-Za-z0-9\-_.!~*'()])/ sprintf "%%%0x", ord $1 /eg;
#decode
$string =~ s/%([A-Fa-f\d]{2})/chr hex $1/eg;
Mark Stosberg hat einen entsprechenden Blog-Eintrag: http://mark.stosberg.com/blog/2010/12/percent-encoding- uris-in-perl.html zum Thema. –