2009-02-19 20 views
10

Uso gli ancoraggi nei miei URL, consentendo alle persone di aggiungere un segnalibro alle "pagine attive" in un'applicazione Web. Ho usato ancore perché si adattano facilmente all'interno del meccanismo di cronologia GWT.Quali due caratteri separatori funzionerebbero in un ancoraggio URL?

La mia implementazione esistente codifica le informazioni di navigazione e dati nell'ancora, separate dal carattere '-'. Cioè creando ancore come # location-location-key-valore-valore-chiave

A parte il fatto che i valori negativi (come -1) causano seri problemi di analisi, funziona, ma ora ho trovato che avere due caratteri separatori sarebbe meglio. Inoltre, dando il numero negativo, vorrei buttarmi via '-'.

Quali altri caratteri funzionano in un ancoraggio URL che non interferirà con l'URL o con i suoi parametri GET? Quanto saranno stabili in futuro?

risposta

18

Guardando il RFC for URLs, section 3.5 un identificatore di frammento (che credo ti riferisci a) è definito come

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

e da Appendix A

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

È interessante notare che le specifiche dice anche che

"I caratteri barra ("/") e punto interrogativo ("? ") Sono autorizzati a rappresentare i dati all'interno dell'identificatore di frammento."

Così sembra che ancore reale, come

<a href="#name?a=1&b=2"> 
.... 
<a name="name?a=1&b=2"> 

dovrebbero essere legale, ed è molto simile al normale stringa di query URL. (Un rapido controllo ha verificato che questi funzionano correttamente in almeno Chrome, Firefox e IE) Dal momento che questo funziona, sto assumendo è possibile utilizzare il metodo per avere gli URL come

http://www.site.com/foo.html?real=1&parameters=2# falsi = 2 & parametri = 3

senza alcun problema (ad esempio la variabile 'parametri' nel frammento non deve interferire con quella nella stringa di query)

È anche possibile utilizzare la codifica percento quando necessario ... e ci sono molti altri caratteri definiti in sub-delimitazioni che potrebbero essere utilizzabili.

NOTA:

anche dalla specifica:

"Un componente identificatore di frammento è indicata dalla presenza di un simbolo di cancelletto (" # ") carattere e termina con la fine della URI."

Quindi tutto dopo # è l'identificatore di frammento e non deve interferire con i parametri GET.

+0

Il tuo primo esempio non dovrebbe essere interpretato come un ancoraggio di "nome" e due parametri aeb? Questo secondo esempio è legale? –

+1

@Paul: No, perché in base alle specifiche, tutto ciò che segue il numero # in un url è considerato l'identificatore del frammento. I normali parametri URL devono essere codificati prima del numero # –

+0

Quindi http://machine.domain.com:8232/path?a=2&b=2#mapping?c=-32&d=564 dovrebbe funzionare?Diamine, è molto più carino quei trattini fastidiosi :-) –

Problemi correlati