URLのフラグメント識別子に有効な文字のリスト?


86

私はフラグメント識別子を使用して、この男に似たWebアプリでAJAXイベントのパーマリンクを作成しています。何かのようなもの:

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

かなりの検索を行いましたが、フラグメントidenitiferの有効な文字のリストが見つかりません。W3C仕様は何を提供していません。

一般的にURLと同じように文字をエンコードする必要がありますか?

これに関する良い情報はどこにもないようです。

回答:


98

RFC3986を参照してください。

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、つまり、「%」はどこでも許可されるのではなく、2つの有効な文字がそれに続く場合にのみ許可されるということですか?
Pacerier 2014年

1
@Pacerierはい、%エスケープ文字としてのみ許可されています。%25単一のをエンコードするために使用し%ます。
gioele 2016

1
戻る/進むボタンは、RFCが有効な文字であると述べているにもかかわらず、コロンが含まれるフラグメント識別子では機能しません。
Vince 2016年

うわー!どのascii文字使用できないかを簡単に見分けることができるでしょう!
e2-e4 2016年

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

もう1つのRFCはそれについて話します:RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.