Wann sollten Zeichen wie {und} (geschweifte Klammern) in URLs prozentual codiert sein?

9

Laut RFC 3986 sind die folgenden Zeichen reserviert und müssen in Prozent codiert werden, damit sie verwendet werden können in einem URI anders als ihre reservierten Verwendungen: :/?#[]@!$&'()*+,;=

Außerdem gibt es einige Zeichen an, die speziell nicht reserviert sind : a-zA-Z0-9\-._~

Es scheint klar zu sein, dass man im Allgemeinen reservierte Zeichen kodieren sollte (um Fehlinterpretationen zu vermeiden) und nicht reservierte Zeichen kodieren (für Lesbarkeit), aber wie sollten Zeichen behandelt werden, die keiner Kategorie angehören? Beispiel { und } erscheinen nicht in einer der beiden Listen, sondern sind Standard-ASCII-Zeichen.

Wenn man nach modernen Browsern sucht, scheinen sie manchmal unterschiedliche Verhaltensweisen zu haben. Stellen Sie sich beispielsweise vor, die URL https://www.google.com/search?q={ in die Adressleiste eines Webbrowsers einzufügen:

  • Chrome 34.0.1847.116 m ändert es nicht.
  • Firefox 28.0 ändert das nicht.
  • Internet Explorer 9.0 ändert es nicht.
  • Safari 5.1.7 ändert es in https://www.google.com/search?q=%7B

Wenn jedoch https://www.google.com/#q={ eingefügt wird (Entfernen von "search" und Ändern von ? in ein # , wodurch das Zeichen Teil des Fragments / hash anstelle der Abfragezeichenfolge wird), finden wir Folgendes:

  • Chrome 34.0.1847.116 m ändert es in https://www.google.com/#q=%7B (über JavaScript)
  • Firefox 28.0 ändert das nicht.
  • Internet Explorer 9.0 ändert es nicht.
  • Safari 5.1.7 ändert es in https://www.google.com/#q=%7B (vor der Ausführung von JavaScript)

Darüber hinaus, wenn Sie JavaScript verwenden, um die Anfrage asynchron durchzuführen (zB dieses MDN-Beispiel geändert) Um eine URL von ?q={ ) zu verwenden, wird die URL nicht automatisch in Prozent codiert. (Ich nehme an, das liegt daran, dass die XMLHttpRequest-API davon ausgeht, dass die URL zuvor codiert / maskiert wurde.)

Ich möchte (aus einem Grund, der mit einer bizarren Kundenanforderung zusammenhängt) { und } im Dateinamensteil von URLs verwenden, ohne (1) Dinge zu brechen und idealerweise auch ohne (2) hässlich aussehende Prozent zu erzeugen -codierte Einträge im Netzwerk-Panel der Web Inspectors / Debugger von modernen Browsern.

    
iX3 14.04.2014, 15:52
quelle

1 Antwort

3

(RFC 2396 )

Sie sollten einen der unwise -Abschnitt codieren und der RFC gibt den Grund dafür an.

zusätzliche Informationen aus dem RFC

Konto für < > # % primär beliebige Steuerzeichen 00-1F und 7F

auch als unwise im RFC markiert: " { } | \ ^ [ ] '

Wenn Sie # in den Querystring-Werten angeben möchten, ist das ein Sonderfall, weil ein # ein Fragmentkennung eines uri.

Einige Zeichen, die nicht codiert werden müssen, werden entweder codiert oder nicht akzeptiert, z. B. ~

Es gibt 2 allgemein akzeptierte Kodierungen für (Leerzeichen) %20 und +

Hier ist eine Geige mit einigen der Testfälle, die ich benutze.

    
Maslow 17.09.2014 18:26
quelle

Tags und Links