我正在使用片段标识符在我的Web应用程序中为此家伙创建AJAX事件的永久链接。就像是:
http://www.myapp.com/calendar#filter:year/2010/month/5
我已经做了很多搜索,但是找不到片段idenitifer的有效字符列表。在W3C规范不提供任何内容。
我是否需要将字符编码为与通常的URL相同的字符?
似乎在任何地方都没有任何好的信息。
Answers:
参见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],-,.,_,~,:,@,/,和?
%仅允许作为转义字符。使用%25编码单%。
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。
VERTICAL BAR (|),GRAVE ACCENT (`)并且SPACE ( )不在清单中。因此,不在列表中的可打印(7位)US-ASCII字符的完整列表为:"#%< >[\]^`{|}