2014-04-14 15 views
9

RFC 3986 göre aşağıdaki karakterler saklıdır ve yüzde olarak kodlanmış onların ayrılmış kullanımları olarak daha URI diğer kullanılmak üzere olması gerekiyor gibidir: :/?#[]@!$&'()*+,;=Şimdiyse, eğer {ve} gibi karakterler (kaşlı ayraçlar) URL'lerde yüzde olarak kodlanmışsa?

Dahası özellikle ayrılmamış bazı karakterleri belirtir: a-zA-Z0-9\-._~

o (yanlış anlamaya meydan vermeyecek) ve (okunabilmesi için) ayrılmamış karakterleri kodlamak değil genellikle bir ayrılmış karakterler kodlamak gerektiği açıkça görünüyor, ama nasıl her iki kategoriye girmeyen karakterler ele alınmalıdır? Örneğin { ve } her iki listede görünmez, ancak standart ASCII karakterleridir.

Rehberlik için modern tarayıcılara bakmak bazen farklı davranışlara sahip gibi görünüyor. Örneğin, bir web tarayıcısının adres çubuğuna URL https://www.google.com/search?q={ yapıştırarak düşünün:

  • Krom 34.0.1847.116 m bunu değiştirmez.
  • Firefox 28.0 onu değiştirmez.
  • Internet Explorer 9.0 bunu değiştirmez. bir macunlar https://www.google.com/#q={ (sorgu dizesi yerine parça/karma karakteri parçası haline, "arama" kaldırılması ve bir # için ? değişen eğer
  • Safari 5.1.7, https://www.google.com/search?q=%7B Ancak

dönüştürürler

  • Krom 34.0.1847.116 m (
  • Firefox 28.0 bunu değiştirmez) JavaScript aracılığıyla https://www.google.com/#q=%7B dönüştürürler:) biz görüyoruz.
  • Internet Explorer 9.0 bunu değiştirmez. Zaman uyumsuz isteği gerçekleştirmek için JavaScript kullanıldığında
  • Safari 5.1.7 URL yüzde değil (yani this MDN example?q={ bir URL kullanmak için modifiye kullanılarak), Ayrıca (JavaScript çalıştırmadan önce) https://www.google.com/#q=%7B için

değiştirir otomatik olarak kodlanmış. (XMLHttpRequest API URL'si önceden/kodlanmış öncelenmelidir varsayar çünkü tahmin ediyorum.)

I (tuhaf bir müşteri ihtiyacına ilişkin bir nedenden dolayı) dosya adı kısmında { ve } kullanmak istiyorum (1) şeyleri kırmadan ve ideal olarak da içermeyen URL'ler (2) modern tarayıcıların web denetleyicileri/hata ayıklayıcılarının ağ panelinde çirkin görünüşlü kodlanmış girişler oluşturma.

cevap

3

(RFC 2396)

Sen akılsızca bölümün herhangi kodlayan edilmeli ve rfc neden verir."{:


Hesap <>#% öncelikle için RFC gelen ek bilgiler herhangi bir kontrol karakterleri 00-1F ve 7F

da RFC akılsızca olarak işaretlenmiş Bir # bir uri bir fragment identifier çünkü `

|\^[ Eğer sorgu dizesi değerlerini olmak # izin niyetinde olmadığını o, özel bir vaka. yok

Bazı karakterler kodlanacak kabul edilir şifrelenmiş veya böyle ~ olarak

(boşluk) %20 ve +

Here's a fiddle için 2 genel kabul görmüş kodlamaları bazılarıyla vardır kullanıyorum test durumları.

+1

Hmm, RFC3986'dan bir yanıt almayı umuyorum, çünkü bunun RFC2396'yı hızlandırması gerekiyordu, ama cevabınızı takdir ediyorum. Ek D, 'Karakterler üzerinde 2. Bölüm, hangi karakterlerin rezerve edildiğini, ne zaman ayrıldıklarını ve niçin ayrıldıklarını açıklamak için yeniden yazılmıştır, genel sözdizimi ile sınırlayıcı olarak kullanılmadıklarında bile… ve ben İronik olarak, benim için belirsizliğe neden olan yeniden yazma olduğunu tahmin et. – iX3