URL中片段标识符的有效字符列表?


86

我正在使用片段标识符在我的Web应用程序中为此家伙创建AJAX事件的永久链接。就像是:

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

我已经做了很多搜索,但是找不到片段idenitifer的有效字符列表。在W3C规范不提供任何内容。

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

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

Answers:


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 2010年

1
@Artefacto,那么这是否意味着一个“%”是容许无处不在,但只有当两个有效的字符遵循它允许吗?
Pacerier,2014年

1
@Pacerier是,%仅允许作为转义字符。使用%25编码单%
gioele 2016年

1
后退/前进按钮不适用于带有冒号的片段标识符,尽管RFC声明其为有效字符。
文斯

哇!判断哪些ascii字符无法使用可能会更容易!
e2-e4'6

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。


谢谢。给了Artefacto答案,因为他发快了,但给了您+1的回复。
sohtimsso1970 2010年

2
我想您会丢失不可打印的ASCII字符和非ASCII字符。
Artefacto 2010年

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 | ";" | ":" | "@" | "&" | "=" ]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.