parse_url()不解析特定的url

时间:2015-12-01 12:43:06

标签: php

我遇到了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()将不起作用。

1 个答案:

答案 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