2012-03-01 19 views
8

Gerçekten anlamadığım şey '?' yerine URL'ler içinde '&' arasında:URL'lerde parametre ayırıcı, yanlış kullanım soru işareti

question mark vs ampersand

biz ilk ayırıcı karakteri olarak farklı bir karakter kullanırsanız Kimsenin hayatı kolaylaştırır. Makul bir açıklama yapabilir misiniz?

DÜZENLEME: daha fazla araştırmadan sonra "&" dosya adının bir parçası olabileceğini buldum (& terms.html terimi) "?" iyi bir ayırıcıdır. Ama hala "?" Kullanmayı düşünüyorum

question mark as separator

ilk bakışta belli değil "&" kullanarak bir avantajı var mı: ayırıcılar için (görüş url jeneratörler ve Çözümleyicileri noktadan) daha kolay hayatlarını yapar?

cevap

7

URI özelliklerinden (RFC 3986) bakış açısından, buradaki tek ayırıcı "?" Şeklindedir. Sorgunun biçimi opak; ampersands, form gönderimleri için HTML'nin kullanıldığı bir şeydir.

+0

Farklı zamanlarda geliştiler mi? HTML, URI’dan önce var mıydı? –

+0

Evet, onlar ayrı ayrı geliştirilen, ama hayır, HTML Urı'ler (eski adıyla URL'ler) daha önce yoktu. –

+4

Yani cevap gibi bir şey olabilir "HTML ve URI'ler ayrı ayrı geliştirilen ve HTML geliştiricileri yerine & parametre ayırıcı olarak? Kullanmanın yararı farkında değil" diyebilirim dışında "farkında değil" değil doğrudur.İyi bir sebebi olabilir. –

4

Bu yazının cevabı güzeldir - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/. Vurgulamak için, aşağıdakileri yapar:

Sorgu, bir kaynağa sunucudaki bazı parametreleri göndermek için tercih edilen yoldur. Bunlar anahtar = değer çiftleridir ve URL'nin geri kalanından a? (soru işareti) karakteri ve normalde birbirinden & (ve işareti) karakterleri ile ayrılır. Bilmediğiniz şeyler 'un birbirinden ayırmak için yasal olduğu gerçeğidir; (yarı kolon) karakteri de. Şu URL'ler eşdeğerdir:

http://www.blah.com/some/crazy/path.html?param1=foo&param2=bar

http://www.blah.com/some/crazy/path.html?param1=foo;param2

-1

RFC 3896 (https://www.ietf.org/rfc/rfc3986.txt) genel ve alt ayraçları tanımlar ... '?' genel bir '&' ve ';' alt. Bu konuda oldukça net.

Bu durumda, ikinci '?' chars, sorgunun bir parçası olarak ele alınacaktır. Sorgu ayrıştırıcı, belirli bir şekilde özniteliği izlerse, tüm sorguyu uygulama hedefine iletir. Uygulama hedefi, sorgu dizesini daha sonra işleyen bir şekilde işlemeyi seçebilirse? Bir param isim-değer çiftleri sınırlayıcı olarak, bu uygulamanın tasarımcıları kadardır.

Tahminimce bu genellikle 'sadece çalışır' çünkü sorgu dizelerini ayıran kod ve orijinal uri tüm sınırlayıcıları eşleme için kullanır: 1) ilk sorgu '?' sonra 2) sorgu dizesi '?' içeren char eşleme listesi kullanılarak ayrıştırılır. (sadece kolaylık) .... Bu zaten mevcut olan ayrıştırma kütüphanelerinde meydana gelebilir.

+0

, notlarınızı açıklayın lütfen. – Rondo

İlgili konular