在php中创建一个机制,以发现网站是否相同,即使它有http、https或两者都没有

在php中创建一个机制,以发现网站是否相同,即使它有http、https或两者都没有,php,http,https,protocols,Php,Http,Https,Protocols,我想用php创建一个系统,显示网站是否相同,即使协议是否存在: 示例: www.facebook.com facebook.com http://facebook.com https://facebook.com http://www.facebook.com https://www.facebook.com 所有这些都是同一个网站,只是写得不同。主要组件是“facebook.com”,其他组件是使用的协议。我建议您使用。在您的情况下,您需要一个正则表达式来标识二级域(SLD)。以下表达式涵盖

我想用php创建一个系统,显示网站是否相同,即使协议是否存在:

示例:

www.facebook.com
facebook.com
http://facebook.com
https://facebook.com
http://www.facebook.com
https://www.facebook.com

所有这些都是同一个网站,只是写得不同。主要组件是“facebook.com”,其他组件是使用的协议。

我建议您使用。在您的情况下,您需要一个正则表达式来标识二级域(SLD)。以下表达式涵盖了您的情况,但您可能希望扩展或细化顶级域(TLD)列表(
.com
.org
.net
,等等),使其更通用:

https?:\/\/(.*\.)?(.*)(.com|.org|.net)
此表达式将返回3个组:

  • 第1组:子域
  • 第2组:二级域
  • 第3组:顶级域
你可以试试上面提到的正则表达式。
如果您想了解有关如何在PHP中使用正则表达式的更多信息,请查看。

这可能是解决您问题的好方法:

function isMatches(...$urls): bool
{
    if(count($urls) <= 1) {
        return true;
    }

    $pattern = '/^(http)(s)?(:\/\/)?(www\.)?(.*)$/';
    $url = preg_replace($pattern, '$5', $urls[0]);
    for($i = 0; $i < count($urls); $i++) {
        if($url !== preg_replace($pattern, '$5', $urls[$i])) {
            return false;
        }
    }

    return true;
}

欢迎堆栈溢出不是代码编写服务。我们总是很乐意帮助和支持新的程序员,但你需要先帮助自己。您应该尝试自己编写代码。请阅读和阅读。我不擅长PHP,但可能有一个函数可以解析我们的框的URL。您可能遇到缺少的方案(http/https)问题,该方案与www.facebook.com将正则表达式更新为$pattern='/^(https?:\/\/)?(:\/\/)?(www\)?(.*)$/';仅包括www.facebook.com。
$result = isMatches(
    'http://facebook.com',
    'http://www.facebook.com',
    'https://facebook.com',
    'https://www.facebook.com'
); // true

$result = isMatches(
    'http://facebook.com2',
    'http://www.facebook.com',
    'https://facebook.com',
    'https://www.facebook.com'
); // false