2012-09-25 54 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。。而且,作为服务器作者,应该始终仔细验证参数值,以确保这些值是有意义的。