2009-07-15 11 views
9

Ich schreibe einen Code, der URLs verarbeitet, und ich möchte sicherstellen, dass ich keinen seltsamen Fall verlasse ...Welche gültigen Zeichen können in einem URL-Host angezeigt werden?

Gibt es gültige Zeichen für einen Host außer: AZ, 0-9 , "-" und "."?

(Dies beinhaltet alles, was in Subdomains sein kann usw. esentially, irgendetwas zwischen: // und dem ersten /)

Dank!

+0

Vorausgesetzt, dass Sie nach "alles zwischen: // und dem ersten /" suchen, vergessen Sie nicht, dass Sie auch eine Portnummer haben, wie in http (s): //my.host.com : 8080/... – fredw

Antwort

24

Bitte sehen Restrictions on valid host names:

Host-Namen sind aus Serie, bestehend aus Etiketten mit Punkten zusammengefügt, wie alle Domain-Namen . Beispiel: "en.wikipedia.org" ist ein Hostname. Jedes Etikett muss zwischen 1 und 63 Zeichen lang sein, und der gesamte Hostname darf maximal 255 Zeichen umfassen.

RFCs Auftrag, dass ein Etikett Hostnamen nur die ASCII-Buchstaben 'a' durch 'z' (Groß- und Kleinschreibung), die '0' Ziffern enthalten kann, durch '9', und den Bindestrich. Hostname-Labels können nicht mit beginnen oder mit einem Bindestrich enden. Keine anderen Symbole, Interpunktionszeichen oder Leerzeichen sind erlaubt.

+0

'en.wikipedia.org' ist ein vollständig qualifizierter Domainname. Es besteht aus dem Hostnamen 'en' und dem Domain-Namen 'wikipedia.org'. –

3

Hängt auf welcher Ebene Sie die Validierung zu tun (vor oder nach der URL zu entkommen). Wenn Sie versuchen, Benutzereingaben zu überprüfen, kann es weit über ASCII (mit großen Unicode-Abschnitten) hinausgehen.

Siehe http://en.wikipedia.org/wiki/Internationalized_domain_name

Wenn Sie versuchen, nach all dem Entkommen und die „Punycode“ getan wird, zu validieren es keinen Sinn, bei der Validierung, da diese bereits nur dann gewährleistet ist, um gültige Zeichen enthalten, die von der alten RFC.

+0

Hmmmmm, guter Punkt, ich muss in das schauen, um zu sehen, ob es für mich gilt oder nicht. Ich weiß nicht genau, was Sie vor oder nach der Flucht meinen, und ich bin mir nicht ganz sicher, wie es sich auf meine spezielle Situation bezieht (was ein bisschen komisch ist). Ich muss damit experimentieren, danke! –

+0

Was ich unter "vor oder nach der Flucht" verstehe "vor der Flucht": das Zeug, das der Benutzer eingibt. In diesem kann man Dinge verwenden, die die "after escape" - URL nicht benutzen kann (zum Beispiel =/&?) "after escape": die URL, wie sie von Low - Level - DNS/http/was auch immer verwendet wird (% 3D% 2F% 26% 3F). Dieses "Entkommen" ist komplexer als "Ersetzen Sie ungültige Zeichen durch% xx" für internationale Zeichen –

1

Denken Sie daran, dass DNS-Systeme neben den Hostnamenregeln des Internets frei sind, beliebige Namen zu erstellen. DNS-Server können 8-Bit-Binäranforderungen annehmen und beantworten: Das DNS-Drahtprotokoll verbietet dies nicht.

Dies bedeutet, dass für interne LAN-URLs möglicherweise andere Regeln gelten, z. B. der Unterstrich in einem Hostnamen.

0

Wenn Sie einen URL-Parsing-Code schreiben möchten, der perfekt zur offiziellen W3C-Spezifikation passt, lesen Sie das Dokument unter www.w3.org/TR/url-1/. Spezifische Informationen zu Hosts in URLs finden Sie in Abschnitt 3 (Hosts).

Verwandte Themen