Daftar karakter yang valid untuk pengenal fragmen di URL?

87

Saya menggunakan pengenal fragmen untuk membuat tautan permanen untuk acara AJAX di aplikasi web saya yang mirip dengan orang ini . Sesuatu seperti:

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

Saya telah melakukan sedikit pencarian tetapi tidak dapat menemukan daftar karakter yang valid untuk idenitifer fragmen. Spesifikasi W3C tidak menawarkan apa pun.

Apakah saya perlu menyandikan karakter yang sama dengan URL pada umumnya?

Sepertinya tidak ada informasi bagus tentang ini di mana pun.

sohtimsso1970
sumber

Jawaban:

100

Lihat RFC 3986 .

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

Sehingga Anda dapat menggunakan !, $, &, ', (, ), *, +, ,, ;, =, sesuatu yang cocok %[0-9a-fA-F]{2}, sesuatu yang cocok [a-zA-Z0-9], -, ., _, ~, :, @, /, dan?

Artefacto
sumber
Sempurna, saya mencari itu di RFC tetapi sepertinya tidak dapat menemukan klausa yang tepat. Terima kasih.
sohtimsso1970
1
@Artefacto, Jadi, apakah itu berarti bahwa "%" tidak diperbolehkan di mana-mana, tapi hanya diperbolehkan jika dua karakter yang valid mengikutinya?
Pacerier
1
@Pacerier ya, %hanya diperbolehkan sebagai karakter pelarian. Gunakan %25untuk menyandikan satu %.
gioele
1
Tombol kembali / maju tidak berfungsi dengan pengidentifikasi fragmen yang memiliki titik dua meskipun RFC menyatakan bahwa itu adalah karakter yang valid.
Vince
1
Wow! Mungkin akan lebih mudah untuk mengetahui karakter ascii apa yang tidak dapat digunakan!
e2-e4
31

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

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

dan

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

Jadi, gabungan, fragmen dapat tidak mengandung #, mentah %, ^, [, ], {, }, \, ", <dan >menurut RFC.

kennytm
sumber
Terima kasih. Memberi jawaban untuk Artefacto karena dia lebih cepat berambut tetapi memberi Anda +1 untuk tanggapannya.
sohtimsso1970
2
Saya kira Anda kehilangan karakter ASCII yang tidak dapat dicetak dan karakter non-ascii.
Artefacto
2
Sepertinya Anda lupa VERTICAL BAR (|)dan GRAVE ACCENT (`)dan SPACE ( )tidak dalam daftar. Jadi daftar lengkap karakter US-ASCII yang dapat dicetak (7-bit) di not-list adalah:"#%< >[\]^`{|}
GitaarLAB
2

Satu RFC lain berbicara tentang itu: RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
sirkazey.dll
sumber