我遇到了PHP parse_url()
的问题。
我的网址如下:
$url = "_search?q=sku:89399";
var_dump(parse_url($url));
据此,var_dump()
返回bool(false)
,说这不是正确的网址。
但是使用这样的网址有效吗?!
$url = "_search?q=sku:202490";
var_dump(parse_url($url));
var_dump()
返回array(2) { ["path"]=> string(7) "_search" ["query"]=> string(12) "q=sku:202490" }
所以你有任何想法,为什么 sku:202490 有效,而 sku:89399 没有?
非常感谢你!
更新
谢谢大家的意见。根据前几条评论,如果数字有5个或更少的数字,我可以确认该数字被解释为端口号。因此,如果数字大于或等于5的数字大于 65535 parse_url()
将不起作用。
答案 0 :(得分:1)
您可以为特定网址设置“虚拟”方案:
示例#1
$url = "_search?q=sku:89399";
var_dump(parse_url("test://".$url));
输出#1
array(3) {
["scheme"]=> string(4) "test"
["host"]=> string(7) "_search"
["query"]=> string(11) "q=sku:89399"
}
您的代码适用于PHP> = 7.0.0 beta1!
示例#2
$url = "_search?q=sku:89399";
var_dump(parse_url($url));
输出#2(PHP版本> = 7.0.0 beta1)
array(2) {
["path"]=> string(7) "_search"
["query"]=> string(11) "q=sku:89399"
}
输出#2(PHP版本< 7.0.0 beta1)
bool(false)
根据以上信息,可以编写自己的功能来执行此操作。请尝试以下方法:
<?php
function custom_parse_url($url) {
if (version_compare(phpversion(), '7.0.0beta1') < 0) {
return parse_url('test://'.$url);
} else {
return parse_url($url);
}
}
$url = "_search?q=sku:89399";
var_dump(custom_parse_url($url));
您可以在这里找到一个有效的例子:https://3v4l.org/dN2bP