在 PHP 中分解 url

问题描述 投票:0回答:2

我对此功能有疑问。它根据我的选择来排列域,但是有一个问题,前段时间发生了变化。域名是这样的 www.site.com www.sites2.com www.sitett3.com

我把它放在列表中:site,sites2,sitet3

简而言之,该安排仅包含域名,没有“ **www **”,也没有“ .com

域名最近已更改为 wsw.site.com 23d.sites2.com dsd.sitett3.com 子域名每天都在变化

代码不再正确排列,因为它需要我每天更改列表中的域名

我想知道一种仅采用域的解决方案,即使子域发生变化或域扩展名发生变化

代码:



function souq_Genrator() {
    add_menu_page( 'servers', 'servers sort' , 'administrator', 'servers', 'sortdivs', 'dashicons-cart' ); 

}
add_action('admin_menu', 'souq_Genrator');


function SortServers($servers){
    $serverLink      = [];
    //$order           = ['myviid','myvid','vidshare','vidshar','vidbem','vidbm',];
    $order           = array_values(get_option('serversorts'));
    $ordered         = array();
    $i= count($order);
    $e= 0;
    foreach ($servers as $key => $server) {
        preg_match('/src="([^"]+)"/', $server['code'], $match);
        $url        = $match[1];
        $Link       = str_replace("\r",'', $url);
        $Link       = parse_url($Link);
        $servername = explode('.', str_replace('www.', '', $Link['host']))[0];
            $newKey = array_search($servername,$order);
            if (false !== $newKey) {
                $ordered[$newKey] = $server;
                $e++;
                $i++;
            }else{
                $ordered[$i] = $server;
                $i++;   
            }   


        

    }    

    ksort($ordered);
    $ordered = array_values($ordered);
    return $ordered;

?>    

php explode
2个回答
0
投票

这里有很多猜测,因为您没有向我们提供所需的所有信息。如果

Link['host']
只包含域名,您想按
.
进行爆炸并取倒数第二个结果:

$servername = array_slice(explode('.', $Link['host']), -2, 1);

0
投票

有两种域名:gTLD 和 ccTLD。 gTLD 以 3 个或更多字符结尾,ccTLD 以 2 个字符结尾,因此您只需用点分解域名,然后检查最后一项的长度。简单的代码是这样的:

function getDomainName(string $domain) :string
{
    $domain = explode('.', $domain);
    $i = count($domain) - 1;
    return strlen($domain[$i]) == 2 ? $domain[$i - 2] : $domain[$i - 1];
}

注意:这并不能判断域名是否合法。

© www.soinside.com 2019 - 2024. All rights reserved.