2010-05-17 20 views
71

Estoy usando el identificador de fragmento para crear un enlace permanente para eventos AJAX en mi aplicación web similar to this guy. Algo así como:Lista de caracteres válidos para el identificador de fragmento en una URL?

http://www.myapp.com/calendar#filter:year/2010/month/5 

He hecho un poco de búsqueda, pero no puedo encontrar una lista de caracteres válidos para el idenitifer fragmento. El W3C spec no ofrece nada.

¿Necesito codificar los caracteres igual que la URL en general?

No parece haber ninguna buena información sobre esto en ninguna parte.

Respuesta

81

Ver el RFC 3986.

fragment = *(pchar/"/"/"?") 
pchar   = unreserved/pct-encoded/sub-delims/":"/"@"  
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 
pct-encoded = "%" HEXDIG HEXDIG 
sub-delims = "!"/"$"/"&"/"'"/"("/")" 
       /"*"/"+"/","/";"/"=" 

Así que usted puede utilizar !, $, &, ', (, ), *, +, ,, ;, =, uno que concuerde con %[0-9a-fA-F]{2}, uno que concuerde con [a-zA-Z0-9], -, ., _, ~, : , @, / y ?

+0

perfecto, yo estaba buscando que en el RFC, pero no era capaz de encontrar la cláusula de la derecha. Gracias. – sohtimsso1970

+0

Para espacios ¿es un + o un% 20? Angular parece tratar más literalmente ... –

+2

@AndreaRatto '% 20' – Artefacto

28

http://tools.ietf.org/html/rfc3986#section-3.5:

fragment = *(pchar/"/"/"?") 

y

pchar   = unreserved/pct-encoded/sub-delims/":"/"@" 
unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 
sub-delims = "!"/"$"/"&"/"'"/"("/")" 
      /"*"/"+"/","/";"/"=" 
pct-encoded = "%" HEXDIG HEXDIG 

Así, en combinación, el fragmento no puede contener #, una prima %, ^, [, ], {, }, \, ", < y > de acuerdo con el RFC.

+0

Gracias. Dio la respuesta a Artefacto ya que era un cabello más rápido pero le dio +1 para la respuesta. – sohtimsso1970

+2

Supongo que te faltan caracteres ASCII no imprimibles y caracteres no ASCII. – Artefacto

+0

Parece que olvidó '' VERTICAL BAR (|) '' y '' GRAVE ACCENT (')' 'y' 'SPACE()' 'en la lista no. Entonces, la lista completa de caracteres US-ASCII imprimibles (7 bits) en la lista no es: '' "#% < > [\] ^' {|} '' – GitaarLAB

0

Otra hablar de ese RFC: RFC-1738

URL schemeparts for ip based protocols: 
HTTP 

httpurl  = "http://" hostport [ "/" hpath [ "?" search ]] 
hpath   = hsegment *[ "/" hsegment ] 
hsegment  = *[ uchar | ";" | ":" | "@" | "&" | "=" ] 
search   = *[ uchar | ";" | ":" | "@" | "&" | "=" ] 
Cuestiones relacionadas