web-dev-qa-db-ger.com

Darf eine URL ein Leerzeichen enthalten?

Darf ein URI (insbesondere eine HTTP-URL) ein oder mehrere Leerzeichen enthalten? Wenn eine URL codiert werden muss , lautet + nur eine allgemein befolgte Konvention oder eine legitime Alternative?

Kann jemand auf einen RFC verweisen, der angibt, dass eine URL mit einem Leerzeichen codiert werden muss ?

Motivation für die Frage: Beim Betatesten einer Website habe ich festgestellt, dass einige URLs mit Leerzeichen erstellt wurden. Firefox schien das Richtige zu tun, was mich überraschte! Aber ich wollte in der Lage sein, die Entwickler auf einen RFC zu verweisen, damit sie das Bedürfnis verspüren, diese URLs zu reparieren.

121
Joe Casadonte

Gemäß RFC 1738 :

Unsicher:

Zeichen können aus mehreren Gründen unsicher sein. Das Leerzeichen ist unsicher, da möglicherweise signifikante Leerzeichen verschwinden und unbedeutende Leerzeichen eingefügt werden, wenn URLs transkribiert oder gesetzt oder der Behandlung von Textverarbeitungsprogrammen unterzogen werden. Die Charaktere "<" und ">" sind nicht sicher, da sie als Begrenzer für URLs im Freitext verwendet werden. das Anführungszeichen (""") wird in einigen Systemen zur Begrenzung von URLs verwendet. Der Charakter "#" ist unsicher und sollte immer codiert werden, da es im World Wide Web und in anderen Systemen verwendet wird, um eine URL von einer Fragment-/Ankerkennung abzugrenzen, die möglicherweise darauf folgt. Der Charakter "%" ist nicht sicher, da es für die Kodierung anderer Zeichen verwendet wird. Andere Zeichen sind unsicher, da Gateways und andere Transport-Agents diese Zeichen manchmal ändern. Diese Zeichen sind "{", "}", "|", "\", "^", "~", "[", "]", und "`".

Alle unsicheren Zeichen müssen immer in einer URL kodiert sein . Zum Beispiel das Zeichen "#" muss in URLs codiert werden, auch in Systemen, die normalerweise keine Fragment- oder Anker-IDs verarbeiten. Wenn die URL in ein anderes System kopiert wird, das sie verwendet, muss die URL-Codierung nicht geändert werden.

93
Marc Novakowski

Warum muss es verschlüsselt werden? Eine Anfrage sieht so aus:

GET /url HTTP/1.1
(Ignoring headers)

Es gibt 3 Felder, die durch ein Leerzeichen getrennt sind. Wenn Sie ein Leerzeichen in Ihre URL einfügen:

GET /url end_url HTTP/1.1

Sie haben 4 Felder. Der HTTP-Server teilt Ihnen mit, dass es sich um eine ungültige Anforderung handelt.

GET /url%20end_url HTTP/1.1

3 Felder => gültig

Hinweis: In der Abfragezeichenfolge (nach?) Wird ein Leerzeichen normalerweise als + codiert

GET /url?var=foo+bar HTTP/1.1 

eher, als

GET /url?var=foo%20bar HTTP/1.1 
40
Julien

Kürzere Antwort: Nein, Sie müssen ein Leerzeichen codieren. es ist richtig, ein Leerzeichen als + zu kodieren, aber nur in der Abfragezeichenfolge; Im Pfad muss %20 verwendet werden.

31
Peter Hilton

URLs werden in RFC 3986 definiert, obwohl auch andere RFCs relevant sind, RFC 1738 ist jedoch veraltet.

Sie dürfen keine Leerzeichen enthalten, zusammen mit vielen anderen Zeichen. Da diese verbotenen Zeichen oft irgendwie dargestellt werden müssen, gibt es ein Schema, um sie in eine URL zu codieren, indem sie in ihre hexadezimale Entsprechung ASCII mit dem Präfix "%" übersetzt werden.

Die meisten Programmiersprachen/-plattformen bieten Funktionen zum Codieren und Decodieren von URLs, obwohl sie möglicherweise nicht den RFC-Standards entsprechen. Zum Beispiel weiß ich, dass PHP dies nicht tut.

9
Rob Williams

URLs können ein Leerzeichen enthalten und werden in den meisten Browsern als% 20 angezeigt. Die Regeln für die Browserkodierung ändern sich jedoch häufig und wir können nicht davon abhängen, wie ein Browser die URL anzeigt.

Stattdessen können Sie das Leerzeichen in der URL durch ein beliebiges Zeichen ersetzen, das Ihrer Meinung nach die URL lesbarer und "hübscher" macht. "+" .... aber dies sind nicht die Zwänge, so dass Sie eines der Zeichen verwenden können, die nicht in der URL bereits enthalten sein sollen.

Vermeiden Sie%, &,}, {,], [ /,>, <als Ersetzung des URL-Leerzeichens, da dies bei bestimmten Browsern und Plattformen zu Fehlern führen kann.

Wie Sie sehen, verwendet der Stak-Überlauf selbst das Zeichen "-" als Leerzeichen (% 20) als Ersatz.

Viel Spaß beim Fragen.

6
A.M Web Surfer

Ja, der Speicherplatz wird normalerweise mit "% 20" codiert. Alle Parameter, die an eine URL übergeben werden, sollten aus Sicherheitsgründen verschlüsselt werden.

6
user54650

URLs sollten nicht Leerzeichen enthalten. Wenn Sie sich an einen wenden müssen, der dies tut, verwenden Sie den codierten Wert von %20

5
Chris Ballance

Kann jemand auf einen RFC verweisen, der angibt, dass eine URL mit einem Leerzeichen codiert werden muss?

URIs und damit URLs sind in RFC 3986 definiert.

Wenn Sie sich die dort definierte Grammatik ansehen, werden Sie schließlich feststellen, dass ein Leerzeichen niemals Teil einer syntaktisch zulässigen URL sein kann. Daher ist der Begriff "URL mit einem Leerzeichen" ein Widerspruch an sich.

5
Julian Reschke

Zur Beantwortung Ihrer Frage. Ich würde sagen, dass es für Anwendungen üblich ist, Leerzeichen in Werten zu ersetzen, die in URLs verwendet werden. Der Grund hierfür ist in der Regel, dass die auftretende Prozentcodierung (URI) nicht so schwer lesbar ist.

Lesen Sie diesen Wikipedia-Artikel über Prozent-Kodierung .

4
Eric Schoonover

Firefox 3 zeigt %20s in URLs als Leerzeichen in der Adressleiste.

2
Sophie Alpert