yii 检查两个URL字符串是否相同PHP

ecfsfe2w  于 2022-11-09  发布在  PHP
关注(0)|答案(2)|浏览(161)

如何检查两个URL字符串是否相同,例如
http://example.com
http://example.com/
https://example.com/
http://example.com/#
以上所有url均指向同一页面
假设我在我的数据库中有一个url目录,我正在向已经存在的数据库添加一个url。我如何使用PHP验证上述场景的唯一性。

bz4sfanl

bz4sfanl1#

使用parse_url将URL分解为多个部分,并比较那些必须与您定义的“相同”相匹配的部分。
例如:

function areUrlsTheSame($url1, $url2)
{
    $mustMatch = array_flip(['host', 'port', 'path']);
    $defaults = ['path' => '/']; // if not present, assume these (consistency)
    $url1 = array_intersect_key(parse_url($url1), $mustMatch);
    $url2 = array_intersect_key(parse_url($url2), $mustMatch);

    return $url1 === $url2;
}

我的天啊

kyvafyod

kyvafyod2#

我用这个函数来检查URL是否相同。

注意事项:此函数检查GET查询是否也相同!

function isSameUrl($urlPrimary, $urlSecondary){
    $parsedPrimary = parse_url($urlPrimary);
    $parsedSecondary = parse_url($urlSecondary);
    if($parsedPrimary["scheme"] != $parsedSecondary["scheme"]){
        return false;
    }

    if($parsedPrimary["host"] != $parsedSecondary["host"]){
        return false;
    }

    //Compara se ambos estão setados
    if(isset($parsedPrimary["path"]) == isset($parsedSecondary["path"])){
        //Verificar se estão setados = true
        if(isset($parsedPrimary["path"], $parsedSecondary["path"])){
            if($parsedPrimary["path"] != $parsedSecondary["path"]){
                return false;
            }
        }
    }else{
        return false;
    }

    //Compara se ambos estão setados
    if(isset($parsedPrimary["query"]) == isset($parsedSecondary["query"])){
        //Verificar se estão setados = true
        if(isset($parsedPrimary["query"], $parsedSecondary["query"])){
            parse_str($parsedPrimary["query"], $queryPrimary);
            parse_str($parsedSecondary["query"], $querySecondary);

            ksort($queryPrimary);
            ksort($querySecondary);

            if(json_encode($queryPrimary) != json_encode($querySecondary)){
                return false;
            }
        }

    }else{
        return false;
    }

    return true;
}

相关问题