我解析URL的问题比没有路径但查询中有斜杠有问题.例如:http://example.com?q = a / b
我知道这样的URL很可能是无效的(*) – 它至少需要一个斜杠作为这样的路径:http://example.com/?q = a / b.
我尝试过这种URL的所有浏览器都会自动更正URL.这基本上就是我想要重现的:识别并纠正这样的URL.
然而,使用parse_url会产生:
var_dump( parse_url('http://example.com?q=a/b') );
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(15) "example.com?q=a"
["path"]=>
string(2) "/b"
}
虽然在查询中没有斜杠的URL可以正常工作:
var_dump( parse_url('http://example.com?q=ab') );
array(3) {
["scheme"]=>
string(4) "http"
["host"]=>
string(11) "example.com"
["query"]=>
string(4) "q=ab"
}
我尝试过的所有外部库(Jwage\Purl,League\Url,Sabre\Uri)基本上都做同样的事情,这让我感到很惊讶.
为什么(所有?)浏览器“正确”,而(所有?)PHP库让它“错误”?
除了在解析URL之前尝试使用正则表达式捕获这些情况(这可能是不可靠的 – 这就是我想首先使用库的原因),我还有哪些替代方案?