Nach RFC 3986 die folgenden Zeichen sind reserviert und müssen Prozent-codiert sein, um in einer URI anderen verwendet zu werden, als ihre reservierten Verwendungen: :/?#[]@!$&'()*+,;=
Wenn überhaupt sollten Zeichen wie {und} (geschweifte Klammern) in URLs in Prozent codiert sein?
Weiterhin gibt es einige Zeichen, die spezifisch unreserved sind: a-zA-Z0-9\-._~
Es scheint klar, dass in der Regel sollte man reservierte Zeichen kodieren (Fehlinterpretationen zu vermeiden) und kodieren nicht unreserved Zeichen (zur besseren Lesbarkeit), aber wie sollen Zeichen, die behandelt nicht in jede Kategorie fallen werden? Zum Beispiel {
und }
erscheinen nicht in beiden Listen, aber sie sind Standard-ASCII-Zeichen.
Mit Blick auf moderne Browser zur Führung, scheint es manchmal, dass sie unterschiedliche Verhaltensweisen haben. Betrachten wir zum Beispiel die URL einfügen https://www.google.com/search?q={
in die Adressleiste eines Webbrowsers:
- Chrome 34.0.1847.116 m es nicht ändern.
- Firefox 28.0 ändert es nicht.
- Internet Explorer 9.0 ändert es nicht.
- Safari 5.1.7 ändert es
https://www.google.com/search?q=%7B
Wenn man jedoch Pasten https://www.google.com/#q={
(„search“ und Ändern der ?
zu einem #
entfernen, das Zeichen Teil des Fragments/Hash zu machen, anstatt die Query-String) finden wir, dass:
- Chrome 34.0.1847.116 m es
https://www.google.com/#q=%7B
(via JavaScript) - Firefox 28.0 ändert sich nicht ändert.
- Internet Explorer 9.0 ändert es nicht.
- Safari 5.1.7 ändert es
https://www.google.com/#q=%7B
(vor der Ausführung JavaScript)
Wenn ferner JavaScript mit der Anforderung asynchron auszuführen (dh unter Verwendung von this MDN example eine URL von ?q={
zu verwenden modifizieren), ist die URL nicht Prozent -codierte automatisch. (Ich vermute, dies liegt daran, dass das XMLHttpRequest-API geht davon aus, dass die URL vorher codiert/entwertet werden.)
Ich möchte (aus einem Grund zu einer bizarren Kundenanforderung Bezug) verwenden {
und }
im Dateinamen Teil URLs ohne (1) Brechen von Dingen und idealerweise auch ohne (2) Erstellen von hässlich aussehenden Prozent-kodierten Einträgen im Netzwerk-Panel von Webinspektoren/Debuggern moderner Browser.
Hmm, ich habe auf eine Antwort von RFC3986 gehofft, da diese RFC2396 hätte ersetzen sollen, aber ich schätze Ihre Antwort. Anhang D sagt 'Abschnitt 2, in Zeichen, wurde umgeschrieben, um zu erklären, welche Zeichen reserviert sind, wann sie reserviert sind und warum sie reserviert sind, selbst wenn sie nicht als Trennzeichen durch die generische Syntax benutzt werden ....' und ich ironischerweise ist es das Umschreiben, das die Mehrdeutigkeit für mich verursacht hat. – iX3