在PHPChina论坛看一到一个关于”t.php??a=b”这样的问题。 根据RFC3986这应该是不准确的,但服务器会怎样处理呢?

经过测试,Apache2, 与Nginx处理一致, 都是从第一个问号开始处理,之后的问号当作Query的健或值来处理,如“t.php???a=1?b=2&?c=3”的QUERY_STRING为”??a=1?b=2&?c=3″,因此PHP会处理为这样:

array(2) {
  ["??a"]=>
  string(5) "1?b=2"
  ["?c"]=>
  string(1) "3"
}

但PHP5.4内置的Web server将前面几个连续的问号处理为一个,因此得到这样的QUERY_STRING: “a=1?b=2&?c=3″。