2012-09-25 52 views
7

我總是可以測試這個,但我想要一個來自PHP專家的正式答案(我當然不是)。帶有多個查詢字符串的PHP請求

如果有人提出這樣的請求:

http://www.somedomain.com/a.php?param1=value1&param2=value2&param3=value3?param1=value4&param2=value5&param3=value6 

是什麼樣的後果那裏,當我嘗試訪問_GET['param2'],例如?看起來我只是得到第一個價值。在這種情況下,它將返回value2。那是預期的行爲?

第二個問號會影響什麼嗎?例如,會有錯誤嗎?

+0

我不確定,但它可能會導致解析錯誤。解析器可能會在'value2'後遇到'&'標記,但遇到'?',所以它只是退出解析請求。 –

+0

相關問題:[重複HTTP GET查詢鍵的權威位置](http://stackoverflow.com/questions/1746507/authoritative-position-of-duplicate-http-get-query-keys) – Wiseguy

+0

您可以在多個分隔符中使用arg_separator – 2012-09-25 04:43:45

回答

3

它只是得到最後一個定義。在查詢字符串中多次定義一個參數可能會導致潛在的混淆結果。在這些情況下,最好驗證一下你的查詢字符串,至少這就是我所知道的。

第二個問號將作爲的一部分作爲其前面的參數處理。

2

你是正式的,不應該在查詢字符串中有兩個?。如果你這樣做,結果是不確定的。某些平臺(如PHP)會將後續?字符視爲與&字符相同,並允許這些值/對。其他人會將param3的值設爲value3?param1=value4

簡答:不要這樣做。它變得won。。而且,作爲服務器作者,應該始終仔細驗證參數值,以確保這些值是有意義的。