Список дійсних символів для ідентифікатора фрагмента в URL-адресі?


86

Я використовую ідентифікатор фрагмента для створення постійного посилання для подій AJAX у моїй веб-програмі, подібного до цього хлопця . Щось на зразок:

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

Я провів досить багато пошуків, але не можу знайти список дійсних символів для фрагмента idenitifer. Специфікація W3C нічого не пропонує.

Чи потрібно кодувати символи так само, як загалом має URL-адреса?

Здається, ніде немає хорошої інформації з цього приводу.

Відповіді:


98

Див. RFC 3986 .

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

Таким чином , ви можете використовувати !, $, &, ', (, ), *, +, ,, ;, =, що - то відповідність %[0-9a-fA-F]{2}, що - то відповідність [a-zA-Z0-9], -, ., _, ~, :, @, /, і?


Прекрасно, я шукав це в RFC, але, здається, не міг знайти правильного речення. Дякую.
sohtimsso1970

1
@Artefacto, так це значить , що «%» це НЕ дозволено всюди, але тільки допускається , коли два дійсних символів слідувати за ним?
Pacerier

1
@Pacerier так, %дозволяється лише як символ втечі. Використовуйте %25для кодування одиночного %.
gioele

1
Кнопка назад / вперед не працює з ідентифікаторами фрагментів, які мають двокрапку, незважаючи на те, що RFC стверджує, що це дійсний символ.
Вінс

Оце Так! Напевно, було б простіше сказати, які символи ascii не можна використовувати!
e2-e4

30

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

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

і

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

Таким чином, в поєднанні, фрагмент може не містити #, сирі %, ^, [, ], {, }, \, ", <і в >відповідно до RFC.


Дякую. Дав відповідь Артефакто, оскільки він був на волосся швидше, але дав тобі +1 за відповідь.
sohtimsso1970

2
Припускаю, вам не вистачає недрукованих символів ASCII та не-ascii символів.
Artefacto

2
Здається, ви забули VERTICAL BAR (|)і GRAVE ACCENT (`)і SPACE ( )в не-списку. Отже, повний список друкованих (7-бітових) символів US-ASCII у не-списку:"#%< >[\]^`{|}
GitaarLAB

2

Про це говорять ще одні RFC: RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.