Saya menemukan URL berikut hari ini:
http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497
Perhatikan tanda tanya ganda di awal string kueri:
??blogid=122&entry_id=64497
Browser saya sepertinya tidak mengalami masalah dengan itu, dan menjalankan bookmarklet cepat:
javascript:alert(document.location.search);
baru saja memberi saya string kueri yang ditunjukkan di atas.
Apakah ini URL yang valid? Alasan mengapa saya terlalu bertele-tele (dengan asumsi saya) adalah karena saya perlu mengurai URL seperti ini untuk parameter kueri, dan mendukung tanda tanya ganda akan memerlukan beberapa perubahan pada kode saya. Jelas jika mereka berada di alam liar, saya harus mendukung mereka; Saya terutama ingin tahu apakah itu kesalahan saya karena tidak mematuhi standar URL dengan tepat, atau apakah itu sebenarnya URL non-standar.
url
parsing
query-parameters
Mengerjakan dgn kurang baik
sumber
sumber
indexOf()
untuk menemukan tanda tanya, sehingga mengambil posisi kejadian pertama. Kemudian saya memisahkan query_parameters di masing&
- masing dan kemudian pasangan nama / nilai mereka di masing-masing=
.Jawaban:
Ya, ini valid. Hanya yang pertama
?
dalam URL yang memiliki signifikansi, setelah itu diperlakukan sebagai tanda tanya literal:...
http://tools.ietf.org/html/rfc3986#section-3.4
sumber
?blogid
. Ini sebenarnya tampak sebagai parameter yang tidak penting, yaitu halaman disajikan sama dengan sejumlah tanda tanya di sana, atau mengabaikan parameter sepenuhnya.Sebagai jawaban yang berhubungan secara tangensial,
foo?spam=1?&eggs=3
berikan parameterspam
nilai1?
sumber
.htaccess
atau trik serupa. jika kita mengubahfoo
kescript.php
dan membuat permintaan iniscript.php?spam=1?&eggs=3
kemudianvar_dump($_GET)
menunjukkanarray(2) { ["spam"]=> string(2) "1?" ["eggs"]=> string(1) "3" }