Bir URL'de birden fazla soru işareti olması geçerli midir?


92

Bugün aşağıdaki URL ile karşılaştım:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497

Sorgu dizesinin başındaki ikiye katlanmış soru işaretine dikkat edin:

??blogid=122&entry_id=64497

Tarayıcımda herhangi bir sorun yok gibi görünüyor ve hızlı bir yer imi çalıştırıyor:

javascript:alert(document.location.search);

bana yukarıda gösterilen sorgu dizesini verdi.

Bu geçerli bir URL mi? Bu kadar bilgiçlik taslamamın nedeni (olduğumu varsayarsak), sorgu parametreleri için bu gibi URL'leri ayrıştırmam ve iki katına çıkan soru işaretlerini desteklememin kodumda bazı değişiklikler gerektirmesidir. Açıkçası, eğer vahşi yaşıyorlarsa, onları desteklemem gerekecek; URL standartlarına tam olarak uymamanın benim hatam mı, yoksa aslında standart olmayan bir URL mi olduğunu merak ediyorum.


Neyse ki buna rağmen kodumu değiştirmem gerekmedi. indexOf()Soru işaretini bulmak için kullanıyordum , bu yüzden ilk geçtiği yeri aldı. Sonra sorgu_parametrelerini her birine &ve ardından ad / değer çiftlerini her birine ayırıyorum =.
Bungle

Yanıtlar:


108

Evet, geçerlidir. Bir URL’deki yalnızca ilkinin ? önemi vardır ve bundan sonraki herhangi biri değişmez soru işaretleri olarak değerlendirilir:

Sorgu bileşeni, birinci soru işareti ("?") Karakteri ile belirtilir ve bir sayı işareti ("#") karakteri ile veya URI'nin sonunda sonlandırılır.

...

Eğik çizgi ("/") ve soru işareti ("?") Karakterleri, sorgu bileşeni içindeki verileri temsil edebilir. Bazı eski, hatalı uygulamaların, göreli başvurular için temel URI olarak kullanıldığında bu tür verileri doğru şekilde işleyemeyebileceğine dikkat edin (Bölüm 5.1), çünkü bunlar hiyerarşik ayırıcılar ararken sorgu verilerini yol verilerinden ayırt edemiyorlar. Bununla birlikte, sorgu bileşenleri genellikle "anahtar = değer" çiftleri biçiminde tanımlayıcı bilgileri taşımak için kullanıldığından ve sık kullanılan bir değer başka bir URI'ye referans olduğundan, bazen bu karakterlerin yüzde kodlamasından kaçınmak kullanılabilirlik açısından daha iyidir.

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


9
Bu, ilk sorgu parametresinin "blogid" değil "? Blogid" olarak adlandırıldığı anlamına mı geliyor? Bu eğlenceli olabilir ...
GalacticCowboy

3
@GalacticCowboy - Evet, aynı şey aklıma geldi. Haklısınız - Firebug, ilk sorgu parametresinin gerçekte olduğunu doğrular ?blogid. Aslında gerekli olmayan bir parametre gibi görünüyor, yani sayfaya aynı şekilde orada herhangi bir sayıda soru işaretiyle sunuluyor veya parametre tamamen atlanıyor.
Bungle

27

Teğetsel olarak ilgili bir cevap olarak, foo?spam=1?&eggs=3parametreye spamdeğeri verir1?


Evet. hiç .htaccessya da benzer numara olmaması durumunda . biz değiştirirseniz fooiçin script.phpve bu talepte script.php?spam=1?&eggs=3sonra var_dump($_GET)gösterileriarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }
Hebe
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.