gpt4 book ai didi

php - 解析没有路径但在查询中带有斜杠的 URL

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:51:01 24 4
gpt4 key购买 nike

我在解析没有路径但查询中有斜线的 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\PurlLeague\UrlSabre\Uri)基本上都做同样的事情,这让我有点吃惊。

为什么(所有?)浏览器都“正确”,而(所有?)PHP 库却“错误”?

除了在解析 URL 之前尝试使用正则表达式捕获这些情况(这可能不可靠 - 这就是我首先要使用库的原因),我还有什么选择?

(*) 我咨询了三个来源:RFC 1738 , RFC 3986 , WHATWG URL Standard他们三人都对什么被认为是有效的持有不同意见。

最佳答案

如果您仍想应用正则表达式,以下内容应该会生成您要查找的 URL:

$url=pcre_replace('/([^/]+:\/\/[^/]+)\?/', '$1/?',$url);

它要求 URL 以至少一个字符的协议(protocol)名称开头,后跟“://”,一个至少一个字符的域名(“localhost”也可以接受)。之后它会在“?”之前插入“/”,但前提是“?”之前没有其他“/”。

关于php - 解析没有路径但在查询中带有斜杠的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31429439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com