Prozentualer Kodierung
Prozentualer Kodierung, auch bekannt als URL -Codierung, ist eine Methode zu kodieren willkürliche Daten in a Einheitliche Ressourcenkennung (URI) nur die begrenzte Verwendung US-Ascii Charaktere legal innerhalb eines URI. Obwohl es als bekannt ist als URL -CodierungEs wird auch allgemeiner innerhalb des Haupts verwendet Einheitliche Ressourcenkennung (URI) -Set, das beides gehört Einheitlicher Ressourcen -Locator (URL) und Einheitlicher Ressourcenname (URNE). Daher wird es auch zur Herstellung von Daten der verwendet Anwendung/X-WWW-Form-Urlencoded
Medientyp, wie oft bei der Einreichung von verwendet wird Html bilden Daten in Http Anfragen.
Prozentualer Kodierung in einem URI
Arten von URI -Zeichen
Die in einem URI erlaubten Charaktere sind entweder reserviert oder vorbehaltlos (oder ein prozentualer Charakter als Teil einer prozentualen Kodierung). Reserviert Charaktere sind die Charaktere, die manchmal eine besondere Bedeutung haben. Zum Beispiel, Schrägstrich Zeichen werden verwendet, um verschiedene Teile einer URL (oder allgemeiner eine URI) zu trennen. Vorbehaltlos Charaktere haben keine solchen Bedeutungen. Mithilfe von prozentualen Kodierung werden reservierte Zeichen unter Verwendung von speziellen Zeichensequenzen dargestellt. Die Sätze reservierter und nicht reservierter Charaktere und die Umstände, unter denen bestimmte zurückhaltende Zeichen besondere Bedeutung haben, haben sich bei jeder Überarbeitung der Spezifikationen, die URI- und URI -Programme regeln, geringfügig geändert.
! | # | $ | & | ' | ( | ) | * | + | , | / | : | ; | = | ? | @ | [ | ] |
A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | |
a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p | q | r | s | t | u | v | w | x | y | z | |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | - | _ | . | ~ |
Andere Charaktere in einem URI müssen prozentualcodiert sein.
Reservierte Zeichen
Wenn ein Charakter aus dem reservierten Satz (ein "reserviertes Zeichen") in einem bestimmten Kontext eine besondere Bedeutung (einen "reservierten Zweck") hat, und ein URI -Schema besagt, dass es notwendig ist, diesen Charakter für einige zu verwenden Sonstiges Zweck, dann muss der Charakter sein prozentualcodiert. Das prozentuale Kodieren eines reservierten Zeichens beinhaltet die Umwandlung des Zeichens in seinen entsprechenden Byte-Wert in ASCII und dann diesen Wert als Paar von darstellen hexadezimal Ziffern (wenn es eine einzelne Hex -Ziffer gibt, a führende Null sind hinzugefügt). Die Ziffern, denen a vorausging Prozentzeichen (%
) als an Escape-Zeichenwerden dann im URI anstelle des reservierten Charakters verwendet. (Für ein Nicht-ASCII-Zeichen wird es typischerweise in seine Byte-Sequenz in umgewandelt UTF-8und dann wird jeder Bytewert wie oben dargestellt.)
Der reservierte Charakter /
Zum Beispiel, wenn sie in der "Pfad" -Komponente von a verwendet werden Uri, hat die besondere Bedeutung, a zu sein Abgrenzer zwischen Pfadsegmente. Wenn nach einem bestimmten URI -Schema, /
muss sein in ein Pfadsegment, dann die drei Zeichen %2f
oder %2f
muss im Segment anstelle eines Rohes verwendet werden /
.
␣ | ! | # | $ | % | & | ' | ( | ) | * | + | , | / | : | ; | = | ? | @ | [ | ] |
%20 | %21 | %23 | %24 | %25 | %26 | %27 | %28 | %29 | %2a | %2b | %2c | %2f | %3a | %3b | %3d | %3f | %40 | %5b | %5d |
Reservierte Zeichen, die in einem bestimmten Kontext keinen reservierten Zweck haben, können ebenfalls prozentualcodiert sein, unterscheiden sich jedoch nicht semantisch von denen, die dies nicht sind.
In dem "Anfrage"Komponente eines URI (der Teil nach a ?
Charakter) zum Beispiel, /
wird immer noch als reserviertes Charakter angesehen, aber es hat normalerweise keinen reservierten Zweck, es sei denn, ein bestimmtes URI -Schema sagt etwas anderes. Der Charakter muss nicht prozentualcodiert sein, wenn er keinen reservierten Zweck hat.
URIs, die sich nur dadurch unterscheiden, ob ein reservierter Charakter prozentualcodiert ist oder buchstäblich erscheint, gelten normalerweise nicht gleichwertig (bezeichnen dieselbe Ressource), es sei denn, es kann festgestellt werden, dass die betreffenden reservierten Zeichen keinen reservierten Zweck haben. Diese Bestimmung hängt von den Regeln ab, die für reservierte Zeichen durch einzelne URI -Systeme festgelegt wurden.
Ungebildete Charaktere
Charaktere aus dem nicht reservierten Set müssen nie prozentualcodiert sein.
URIs, die sich nur dadurch unterscheiden, ob ein nicht reservierter Charakter prozentualcodiert ist oder buchstäblich per Definition äquivalent ist, aber URI-Prozessoren erkennen in der Praxis möglicherweise nicht immer diese Äquivalenz. Zum Beispiel URI -Verbraucher sollte nicht behandeln %41
anders als A
oder %7e
anders als ~
, aber manche tun es. Für die maximale Interoperabilität sind URI-Produzenten von prozentuellen nicht reservierten Charakteren entmutigt.
Prozentualer Charakter
Weil der prozentuale Charakter ( %
) dient als Indikator für prozentuierte Oktetten, es muss prozentualcodiert sein als %25
Damit dieses Oktett als Daten innerhalb eines URI verwendet werden kann.
Willkürliche Daten
Die meisten URI -Systeme beinhalten die Darstellung willkürlicher Daten, wie z. IP Adresse oder Dateisystem Pfad, als Komponenten eines URI. Das URI -Schema -Spezifikationen sollten, aber oft nicht, eine explizite Zuordnung zwischen URI -Zeichen und allen möglichen Datenwerten, die von diesen Zeichen dargestellt werden.
Binärdaten
Seit der Veröffentlichung von RFC 1738 im Jahr 1994 wurde festgelegt, dass Schemata, die für die Darstellung von vorliegen Binärdaten In einem URI muss die Daten auf die gleiche Weise wie oben in 8-Bit-Bytes und prozentualen Byte unterteilt.[1] Bytewert 0x0f beispielsweise sollte durch dargestellt werden %0f
, aber Byte -Wert 0x41 kann durch dargestellt werden A
, oder %41
. Die Verwendung von nichtcodierten Zeichen für alphanumerische und andere nicht reservierte Zeichen wird normalerweise bevorzugt, da dies zu kürzeren URLs führt.
Zeichendaten
Das Verfahren für prozentuelle Binärdaten wurde häufig, manchmal unangemessen oder ohne vollständig spezifiziert, extrapoliert, um auf charakterbasierte Daten anzuwenden. In dem Weltweites NetzDie prägenden Jahre, wenn sie sich mit Datenzeichen im ASCII-Repertoire befassen und ihre entsprechenden Bytes in ASCII als Grundlage für die Bestimmung der prozentuierten Sequenzen verwenden, war diese Praxis relativ harmlos. Es wurde nur angenommen, dass Charaktere und Bytes eins zu eins kartierten und austauschbar waren. Die Notwendigkeit, Zeichen außerhalb des ASCII -Bereichs darzustellen, wuchs jedoch schnell, und URI -Schemata und Protokolle lieferten häufig keine Standardregeln für die Vorbereitung von Zeichendaten für die Aufnahme in einen URI. Webanwendungen begannen folglich mit unterschiedlichem Multi-Byte, Staatsbürgerlichund andere nicht-ascii-kompatible Kodierungen als Grundlage für prozentuale Kodierung, was zu Unklarheiten und Schwierigkeiten bei der zuverlässigen Interpretation von URIs führt.
Zum Beispiel gehen viele URI -Schemata und -protokolle, die auf RFCs 1738 und 2396 basieren Zeichenkodierung Bevor sie in einem URI durch nicht reservierte Zeichen oder prozentualcodierte Bytes dargestellt werden. Wenn das Schema dem URI nicht erlaubt, einen Hinweis darauf zu geben, welche Codierung verwendet wurde, oder wenn die Codierung mit der Verwendung von ASCII bis prozentig reserviert und nicht reservierte Zeichen konflikt, kann der URI nicht zuverlässig interpretiert werden. Einige Schemata berücksichtigen keine Codierung und schlagen stattdessen nur vor, dass Datenzeichen direkt auf URI-Zeichen zugeordnet werden, was es den Implementierungen überlässt, um zu entscheiden, ob und wie prozentuale Datenzeichen, die weder in den reservierten noch nicht reservierten Mengen enthalten sind.
Neue Zeile | Platz | " | % | - | . | < | > | \ | ^ | _ | ` | { | | | } | ~ | £ | 円 |
%0a oder %0d oder %0d%0a | %20 | %22 | %25 | %2d | %2e | %3c | %3e | %5c | %5e | %5f | %60 | %7b | %7c | %7d | %7e | %C2%A3 | %E5%86%86 |
Beliebige Charakterdaten werden manchmal prozentualcodiert und in Nicht-URI-Situationen verwendet, z.
Aktueller Standard
Die generische URI -Syntax empfiehlt, dass neue URI -Schemata, die die Darstellung von Charakterdaten in einem URI liefern UTF-8und dann prozentualcodieren Sie diese Werte. Dieser Vorschlag wurde im Januar 2005 mit der Veröffentlichung von RFC 3986 eingeführt. URI -Systeme, die vor diesem Datum eingeführt wurden, sind nicht betroffen.
Nicht von der aktuellen Spezifikation berücksichtigt, was mit codierten Zeichendaten zu tun ist. In Computern manifestieren sich beispielsweise die Charakterdaten in codierter Form in einer bestimmten Ebene und könnten daher entweder binäre oder Zeichendaten behandelt werden, wenn sie auf URI -Zeichen abgebildet werden. Vermutlich liegt es an den URI -Schema -Spezifikationen, diese Möglichkeit zu berücksichtigen und das eine oder andere zu erfordern, aber in der Praxis, wenn überhaupt, tun dies tatsächlich nur wenige, wenn überhaupt.
Nicht standardmäßige Implementierungen
Es gibt eine nicht standardmäßige Kodierung für Unicode-Zeichen: %UXXXX
, wo xxxx ist ein UTF-16 Codeeinheit wird als vier hexadezimale Ziffern dargestellt. Dieses Verhalten wird von keinem RFC festgelegt und wurde gewesen abgelehnt von der W3C. Die achte Ausgabe von ECMA-262 enthält immer noch ein Flucht
Funktion, die diese Syntax zusammen mit verwendet Encodeuri
und Enkoduskomponent
Funktionen, die gelten UTF-8 Codierung zu einer Schnur, dann prozentuale Auseinandersetzung mit den resultierenden Bytes.[2]
Der Anwendung/x-www-form-rencodierte Typ
Wenn Daten, die in HTML eingegeben wurden Formen wird übermittelt, die Feldnamen und -werte der Formular werden in einer HTTP -Anforderungsnachricht mithilfe der Methode codiert und an den Server gesendet ERHALTEN oder POSToder historisch gesehen über Email.[3] Die standardmäßig verwendete Codierung basiert auf einer frühen Version der allgemeinen URI-prozentuierten Regeln,[4] mit einer Reihe von Modifikationen wie z. Neue Zeile Normalisierung und Ersetzen von Räumen durch +
Anstatt von %20
. Das Medientyp von Daten, die so codiert sind, ist Anwendung/X-WWW-Form-Urlencoded
und es ist derzeit in der HTML und in der HTML definiert XForms Spezifikationen. zusätzlich CGI Die Spezifikation enthält Regeln, wie Webserver Daten dieses Typs dekodieren und sie für Anwendungen zur Verfügung stellen.
Wenn HTML -Formulardaten in einer HTTP -GET -Anforderung gesendet werden, ist sie in der enthalten Abfragekomponente der Anforderung URI unter Verwendung der oben beschriebenen Syntax. Wenn ein HTTP eingesendet wird POST Anfrage oder per E -Mail werden die Daten in den Körper der Nachricht platziert und Anwendung/X-WWW-Form-Urlencoded
ist im Inhaltsheader der Nachricht enthalten.
Siehe auch
- Internationalisierte Ressourcenkennung
- Punycode
- Binär-bis-Text-Kodierung Für einen Vergleich verschiedener Codierungsalgorithmen
- Shellcode
Verweise
- ^ RFC 1738 §2.2; RFC 2396 §2.4; RFC 3986 §1.2.1, 2.1, 2.5.
- ^ "ECMascript 2017 Sprachspezifikation (ECMA-262, 8. Ausgabe, Juni 2017)". ECMA International.
- ^ Benutzer-Agent-Support für E-Mail-basiert Html Formulareingabe unter Verwendung eines "Mailto" URL Als Formaktion wurde in RFC 1867 Abschnitt 5.6 während der HTML 3.2 -Ära vorgeschlagen. Verschiedene Webbrowser implementierten es, indem sie ein separates E -Mail -Programm aufrufen oder ihre eigenen rudimentären SMTP Fähigkeiten. Obwohl es manchmal unzuverlässig ist, war es kurz beliebt, um Formaten zu übertragen, ohne einen Webserver einzubeziehen oder CGI Skripte.
- ^ Berners-Lee, T. (Juni 1994). "RFC 1630". IETF -Tools. Ietf. Abgerufen 29. Juni 2016.
Externe Links
- DevPal URL -Encoder - Online -Entwickler -Tools, die URL -Codierung unterstützen.
In den folgenden Spezifikationen werden reservierte Charaktere, nicht reservierte Zeichen und prozentuale Kenner in irgendeiner Form besprochen und definieren:
- RFC3986 / Std 66 (plus Errata), die aktuelle generische URI -Syntaxspezifikation.
- RFC2396 (veraltet, plus Errata) und RFC 2732 (plus Errata) Zusammen umfasste die vorherige Version der generischen URI -Syntaxspezifikation.
- URL -Encoder online -Eine Website mit verschiedenen Optionen zum Umwandeln von Dateien oder Texten in URL-kodierter Format.
- URL -Decoder online -Eine Website mit verschiedenen Optionen zum Umwandeln von Dateien oder Texten in URL-dekodiertes Format.
- URL codieren und dekodieren - online -Eine Website mit verschiedenen Optionen zum Umwandeln von Dateien oder Texten in URL-kodierter Format.
- RFC1738 (meistens veraltet) und RFC 1808 (veraltet), die definieren URLs.
- RFC1630 (veraltet), die erste generische URI -Syntaxspezifikation.
- W3C -Richtlinien zur Benennung und Adressierung: URIS, URLs, ...
- W3C Erklärung von UTF-8 in URI
- W3C HTML -Forminhaltstypen