Welche Zeichen sind in GET-Parametern zulässig, ohne sie zu codieren oder zu maskieren? Ich meine so etwas:
http://www.example.org/page.php?name=XYZ
Was können Sie dort anstelle von XYZ haben? Ich denke nur die folgenden Zeichen:
- az (AZ)
- 0-9
- - -
- _
Ist dies die vollständige Liste oder sind zusätzliche Zeichen zulässig?
Ich hoffe ihr könnt mir helfen. Danke im Voraus!
parameters
get
special-characters
character
krächzen
quelle
quelle
Antworten:
Es gibt reservierte Zeichen , die eine reservierte Bedeutung haben, das sind Begrenzer -
:/?#[]@
- und Unterbegrenzer -!$&'()*+,;=
Es gibt auch eine Reihe von Zeichen, die als nicht reservierte Zeichen bezeichnet werden - alphanumerische Zeichen und
-._~
-, die nicht codiert werden sollen.Das bedeutet, dass alles
GET
, was nicht zum nicht reservierten Zeichensatz gehört,% -codiert sein soll, wenn sie keine besondere Bedeutung haben (z. B. wenn sie als Teil eines Parameters übergeben werden) .Siehe auch RFC3986: URI (Uniform Resource Identifier): Generische Syntax
quelle
urlencode()
ich habe keine Ahnung , ob es korrekt funktioniert - es ist nicht immer der Fall mit PHP - Funktionen - aber wenn es dann ja den Fall ist, kann man damit testen ;-) Wie ich schon sagte - Flucht alles , aber nicht reserviert./
und nicht zu entkommen?
. Ich habe das nachgeschlagen, weil Swift diesen in ihrerstringByAddingPercentEncodingForURLQueryParameter
Methode nicht entgeht ! (Richtig, anscheinend)In der Frage wird gefragt, welche Zeichen in GET-Parametern zulässig sind, ohne sie zu codieren oder zu maskieren .
Gemäß RFC3986 (allgemeine URL-Syntax) und RFC7230, Abschnitt 2.7.1 (HTTP / S-URL-Syntax) müssen Sie nur Zeichen außerhalb des Abfragesatzes prozentual codieren (siehe Definition unten).
Es gibt jedoch zusätzliche Spezifikationen wie HTML5, Webformulare und die veraltete W3C-Empfehlung für die indizierte Suche . Diese Dokumente verleihen einigen Zeichen eine besondere Bedeutung, insbesondere Symbolen wie = & +; .
Andere Antworten hier legen nahe, dass die meisten reservierten Zeichen codiert werden sollten, einschließlich "/" "?". Das stimmt nicht Tatsächlich rät RFC3986, Abschnitt 3.4 von einer prozentualen Codierung "/" "?" Zeichen.
RFC3986 definiert die Abfragekomponente als:
Die Schlussfolgerung ist, dass der XYZ-Teil Folgendes codieren sollte:
Es sei denn, spezielle Symbole = &; sind Schlüssel = Werttrennzeichen.
Das Codieren anderer Zeichen ist zulässig, aber nicht erforderlich.
quelle
"!" / "$" / "&" ...
"als Trennzeichen oder innerhalb der Komponente verwendet werden". und dafür sollte prozentual codiert werden?Ich habe einen Test mit der Chrome-Adressleiste und einem
$QUERY_STRING
In-Bash durchgeführt und Folgendes festgestellt:~!@$%^&*()-_=+[{]}\|;:',./?
undgrave (backtick)
werden als Klartext durchgereicht.,
"
,<
Und>
umgewandelt werden%20
,%22
,%3C
und%3E
sind.#
wird ignoriert, da es vom alten Anker benutzt wird .Persönlich würde ich sagen, beißen Sie die Kugel und codieren Sie mit base64 :)
quelle
ALPHA / DIGIT / “-” / “.” / “_” / “~”
Ab RFC 1738, welche Zeichen in URLs zulässig sind:
Die reservierten Zeichen sind ";", "/", "?", ":", "@", "=" Und "&". Dies bedeutet, dass Sie sie per URL codieren müssen, wenn Sie sie verwenden möchten.
quelle
Alphanumerische Zeichen und alle
~
-
_
.
!
*
'
(
)
,
sind innerhalb einer URL gültig.
Alle anderen Zeichen müssen codiert sein.
quelle
Alle Regeln für die Codierung von URIs (die URNs und URLs enthalten) sind im RFC1738 und im RFC3986 angegeben. Hier ist eine TL; DR dieser langen und langweiligen Dokumente:
Die Prozentcodierung, auch als URL-Codierung bezeichnet, ist unter bestimmten Umständen ein Mechanismus zum Codieren von Informationen in einem URI. Die in einer URI zulässigen Zeichen sind entweder reserviert oder nicht reserviert. Reservierte Zeichen sind Zeichen, die manchmal eine besondere Bedeutung haben, aber nicht die einzigen Zeichen, die codiert werden müssen.
Es gibt 66 nicht reservierte Zeichen, die keine Codierung benötigen:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_.~
Es gibt 18 reservierte Zeichen, die codiert werden müssen:
!*'();:@&=+$,/?#[]
und alle anderen Zeichen müssen codiert werden.Um ein Zeichen in Prozent zu codieren, verketten Sie einfach "%" und seinen ASCII-Wert hexadezimal. Die PHP-Funktionen "Urlencode" und "Rawurlencode" erledigen diesen Job für Sie.
quelle
"." | "!" | "~" | "*" | "'" | "(" | ")"
sind auch akzeptabel [RFC2396] . In einem GET-Parameter kann sich wirklich alles befinden, wenn er richtig codiert ist.quelle