2009-07-15 21 views
9

Sto scrivendo un codice che elabora gli URL, e voglio assicurarmi che non esca qualche strano caso ...Quali sono i caratteri validi che possono essere visualizzati in un host URL?

Ci sono caratteri validi per un host diverso da: AZ, 0-9 , "-" e "."?

(Questo include tutto ciò che può essere in sottodomini, ecc esentially, nulla tra: // e la prima /)

Grazie!

+0

Dato che stai cercando "qualsiasi cosa tra: // e il primo /", non dimenticare che potresti avere anche un numero di porta, come in http: //my.host.com : 8080/... – fredw

risposta

24

Si prega di vedere Restrictions on valid host names:

nomi host sono composti da una serie di etichette concatenato con punti, come lo sono tutti i nomi di dominio . Ad esempio, "en.wikipedia.org" è un nome host. Ogni etichetta deve essere compresa tra 1 e 63 caratteri e l'intero nome host ha un massimo di 255 caratteri .

RFC mandato che le etichette di un hostname possono contenere soltanto le lettere ASCII 'un' attraverso 'z' (case-insensitive), i cifre '0' tramite '9', e l' trattino. Le etichette del nome host non possono iniziare o terminare con un trattino. Non sono consentiti altri simboli , caratteri di punteggiatura o spazi vuoti .

+0

'en.wikipedia.org' è un nome di dominio completo. È composto dal nome host 'en' e dal nome di dominio 'wikipedia.org'. –

3

Dipende a quale livello si fa la validazione (prima o dopo l'URL fuga). Se si tenta di convalidare l'input dell'utente, allora può andare ben oltre ASCII (con grandi blocchi di Unicode).

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

Se si tenta di convalidare dopo tutto la fuga e la "punycode" è fatto, non v'è alcun punto di convalida, dal momento che è già garantito per contenere solo caratteri validi dal vecchio RFC.

+0

Hmmmmm, buon punto, ho bisogno di esaminare questo per vedere se si applica a me o no. Non sono esattamente sicuro di cosa intendi prima o dopo la fuga, e non sono esattamente sicuro di come si applica alla mia situazione particolare (che è un po 'strano). Dovrò sperimentare questo, grazie! –

+0

Cosa intendo per "prima o dopo la fuga" "before escape": il materiale che l'utente digita. In questo si possono usare cose che l'url "dopo la fuga" non può usare (ad esempio =/&?) "dopo la fuga": l'url usato dal livello basso dns/http/qualunque (% 3D% 2F% 26% 3F). Questa "escaping" è più complessa che "sostituisci i caratteri non validi con% xx" per i caratteri internazionali –

1

Ricorda che oltre alle regole di hostname di Internet, i sistemi DNS sono liberi di creare qualsiasi nome che preferiscono. I server DNS possono accettare e rispondere alle richieste binarie a 8 bit: il protocollo del filo DNS non lo proibisce.

Ciò significa che per gli URL LAN interni è possibile che siano presenti regole diverse, ad esempio il carattere di sottolineatura visualizzato in un nome host.

0

Se si desidera scrivere il codice di analisi degli URL che corrisponde perfettamente alle specifiche W3C ufficiali, consultare il documento su www.w3.org/TR/url-1/. Vedere la sezione 3 (Host) per informazioni specifiche sugli host negli URL.

Problemi correlati