Bir URL'deki parça tanımlayıcı için geçerli karakterlerin listesi?


87

Bu adama benzer şekilde web uygulamamda AJAX etkinlikleri için kalıcı bağlantı oluşturmak için parça tanımlayıcısını kullanıyorum . Gibi bir şey:

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

Oldukça fazla arama yaptım, ancak parça tanımlayıcı için geçerli karakterlerin bir listesini bulamıyorum. W3C Spec şey sunmuyor.

Karakterleri genel olarak URL ile aynı şekilde kodlamam gerekir mi?

Bu konuda hiçbir yerde iyi bir bilgi yok gibi görünüyor.

Yanıtlar:


100

RFC 3986'ya bakın .

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

Eğer kullanabilirsiniz Yani !, $, &, ', (, ), *, +, ,, ;, =, bir şey eşleştirme %[0-9a-fA-F]{2}, bir şey eşleştirme [a-zA-Z0-9], -, ., _, ~, :, @, /, ve?


Mükemmel, bunu RFC'de arıyordum ama doğru maddeyi bulamadım. Teşekkürler.
sohtimsso1970

1
@Artefacto, Bu yüzden bir "%" anlamına gelmez değil her yerde izin verilir, ancak sadece iki geçerli karakterler onu takip zaman izin?
Pacerier

1
@Pacerier evet, %yalnızca bir kaçış karakteri olarak izin verilir. %25Bir teki kodlamak için kullanın %.
gioele

1
Geri / ileri düğmesi, RFC'nin geçerli bir karakter olduğunu belirtmesine rağmen iki nokta üst üste işareti bulunan parça tanımlayıcılarla çalışmaz.
Vince

1
Vaov! ASCII karakterleri anlatmaya muhtemelen daha kolay olurdu olamaz kullanılabilir!
e2-e4

31

http://tools.ietf.org/html/rfc3986#section-3.5 :

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

ve

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

Bu yüzden, kombine parçası olamaz içeren #bir ham, %, ^, [, ], {, }, \, ", <ve >RFC.


Teşekkürler. Artefacto'ya daha hızlı saç olduğu için cevabını verdi ama cevap için sana +1 verdi.
sohtimsso1970

2
Sanırım yazdırılamayan ASCII karakterleri ve ascii olmayan karakterler eksik.
Artefacto

2
Eğer unuttuğunu görünüyor VERTICAL BAR (|)ve GRAVE ACCENT (`)ve SPACE ( )olmayan-listede. Bu nedenle, listedeki yazdırılabilir (7 bit) US-ASCII karakterlerinin tam listesi şu "#%< >[\]^`{|}
şekildedir

2

Başka bir RFC bundan bahsediyor: RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.