Wann ist ein Leerzeichen in einer URL codiert +
und wann ist es codiert %20
?
url
url-encoding
BC.
quelle
quelle
Antworten:
Aus Wikipedia (Hervorhebung und Link hinzugefügt):
Die tatsächliche prozentuale Codierung wird verwendet,
%20
während Formulardaten in URLs in einer geänderten Form verwendet werden+
. Daher werden Sie höchstwahrscheinlich nur+
in URLs in der Abfragezeichenfolge nach einem angezeigt?
.quelle
multipart/form-data
verwendet MIME-Codierung;application/x-www-form-urlencoded
verwendet+
und richtig codierte URIs verwenden%20
.http://www.bing.com/search?q=hello+world
und eine Ressource mit Leerzeichen im Namenhttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:[email protected]?subject=I%20need%20help
. Wenn Sie dies mit + versucht haben, wird die E-Mail mit + es anstelle von Leerzeichen geöffnet.Diese Verwirrung ist darauf zurückzuführen, dass URLs bis heute "kaputt" sind.
Das läuft darauf hinaus:
Sie sollten
%20
vor?
und+
nach haben.Quelle
quelle
key1=value1&key1=value2
wenn Schlüssel und Werte mit den folgenden Regeln codiert werden.encodeURIComponent
AFAIK Der Inhalt des Abfrageteils liegt jedoch zu 100% bei der App. Ansonsten geht es nur zum ersten#
gibt es keine offizielle Kodierung.Ich würde empfehlen
%20
.Codierst du sie hart?
Dies ist jedoch sprachübergreifend nicht sehr konsistent. Wenn ich mich nicht irre,
urlencode()
behandelt PHP Leerzeichen so, wie+
Python sieurlencode()
behandelt%20
.BEARBEITEN:
Es scheint, ich irre mich. Pythons
urlencode()
(zumindest in 2.7.2) verwendetquote_plus()
anstelle vonquote()
und codiert Leerzeichen daher als "+". Es scheint auch, dass die W3C-Empfehlung das "+" gemäß hier lautet: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1Tatsächlich können Sie dieser interessanten Debatte über Pythons eigenen Issue-Tracker folgen, wie Leerzeichen codiert werden sollen: http://bugs.python.org/issue13866 .
EDIT # 2:
Ich verstehe, dass die gebräuchlichste Art, "" zu codieren, "+" ist, aber nur eine Notiz, es mag nur ich sein, aber ich finde das etwas verwirrend:
quelle
URLEncoder.encode()
Methode in Java konvertiert es auch in+
.Ein Leerzeichen darf nur im Abfrageteil einer URL vom Typ "application / x-www-form-urlencoded" für "application / x-www-form-urlencoded" mit "+" codiert werden. Meiner Meinung nach ist dies ein MAI, kein MUSS. In den übrigen URLs wird es als% 20 codiert.
Meiner Meinung nach ist es besser, Leerzeichen immer als% 20 und nicht als "+" zu codieren, selbst im Abfrageteil einer URL, da in der HTML-Spezifikation (RFC-1866) angegeben wurde, dass Leerzeichen als "codiert" werden sollen. + "in" application / x-www-form-urlencoded "Schlüssel-Wert-Paare vom Inhaltstyp (siehe Absatz 8.2.1. Unterabsatz 1.)
Diese Art der Codierung von Formulardaten wird auch in späteren HTML-Spezifikationen angegeben. Suchen Sie beispielsweise nach relevanten Absätzen zu application / x-www-form-urlencoded in der HTML 4.01-Spezifikation usw.
Hier ist eine Beispielzeichenfolge in der URL, in der die HTML-Spezifikation das Codieren von Leerzeichen als Pluspunkte zulässt: " http://example.com/over/there?name=foo+bar ". Also, erst nach „?“, Leerzeichen können durch Pluszeichen ersetzt werden . In anderen Fällen sollten Leerzeichen in% 20 codiert werden. Da es jedoch schwierig ist, den Kontext korrekt zu bestimmen, empfiehlt es sich, Leerzeichen niemals als "+" zu codieren.
Ich würde empfehlen, alle Zeichen außer "nicht reserviert" in RFC-3986, S. 2.3, prozentual zu codieren
Die Implementierung hängt von der von Ihnen gewählten Programmiersprache ab.
Wenn Ihre URL nationale Zeichen enthält, codieren Sie diese zuerst in UTF-8 und anschließend in Prozent.
quelle