2010-05-17 2 views
71

Я использую идентификатор фрагмента, чтобы создать постоянную ссылку для событий AJAX в моем веб-приложении similar to this guy. Что-то вроде:Список допустимых символов для идентификатора фрагмента в URL-адресе?

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

Я сделал совсем немного поиска, но не могу найти список допустимых символов для фрагмента idenitifer. W3C spec ничего не предлагает.

Должен ли я кодировать символы так же, как и URL-адреса в целом?

Похоже, что никакой информации об этом нет.

ответ

81

См. 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], -, ., _, ~, : , @, /, и ?

+0

Отлично, я искал, что в RFC, но не мог найти правильное положение. Благодарю. – sohtimsso1970

+0

Для пробелов это + или% 20? Угловая, кажется, обрабатывает плюс буквально ... –

+2

@AndreaRatto '% 20' – Artefacto

28

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.

+0

Спасибо. Получил ответ Artefacto, так как он был быстрее, но дал вам +1 за ответ. – sohtimsso1970

+2

Я предполагаю, что вам не хватает непечатаемых символов ASCII и символов, отличных от ascii. – Artefacto

+0

Кажется, что вы забыли '' VERTICAL BAR (|) '' и '' GRAVE ACCENT (')' 'и' 'SPACE()' 'в списке нет. Таким образом, полный список печатаемых (7-разрядных) символов US-ASCII в списке нет: '' "#% < > [\] ^' {|} '' – GitaarLAB

0

Еще один RFC говорят о том, что: RFC-1738

URL schemeparts for ip based protocols: 
HTTP 

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

 Смежные вопросы

  • Нет связанных вопросов^_^