91

我正在使用片段标识符为我的网络应用程序中的 AJAX 事件创建一个永久链接,类似于 this guy。就像是:

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

我进行了大量搜索,但找不到片段标识符的有效字符列表。W3C 规范不提供任何东西。

我是否需要将字符编码为与一般 URL 相同的字符?

似乎在任何地方都没有关于此的任何好的信息。

4

3 回答 3

106

请参阅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], -, ., _, ~, :, @, /, 和?

于 2010-05-17T14:22:24.503 回答
32

https://www.rfc-editor.org/rfc/rfc3986#section-3.5

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

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

因此,结合起来,根据 RFC ,片段不能包含#原始%的 , ^, [, ], {, }, \, ",<和。>

于 2010-05-17T14:26:03.403 回答
2

另一个 RFC 谈到了这一点:RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
于 2014-04-02T12:53:53.507 回答