首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从URL解析域名

从URL解析域名
EN

Stack Overflow用户
提问于 2008-11-09 21:44:49
回答 13查看 283.4K关注 0票数 172

我需要建立一个从URL解析域名的函数。

因此,使用

代码语言:javascript
复制
http://google.com/dhasjkdas/sadsdds/sdda/sdads.html

代码语言:javascript
复制
http://www.google.com/dhasjkdas/sadsdds/sdda/sdads.html

它应该返回google.com

使用

代码语言:javascript
复制
http://google.co.uk/dhasjkdas/sadsdds/sdda/sdads.html

它应该返回google.co.uk

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-11-09 21:48:34

查看parse_url()

代码语言:javascript
复制
$url = 'http://google.com/dhasjkdas/sadsdds/sdda/sdads.html';
$parse = parse_url($url);
echo $parse['host']; // prints 'google.com'

parse_url不能很好地处理严重损坏的urls,但如果您通常希望得到像样的urls,那就很好了。

票数 345
EN

Stack Overflow用户

发布于 2014-11-25 22:35:29

代码语言:javascript
复制
function get_domain($url = SITE_URL)
{
    preg_match("/[a-z0-9\-]{1,63}\.[a-z\.]{2,6}$/", parse_url($url, PHP_URL_HOST), $_domain_tld);
    return $_domain_tld[0];
}

get_domain('http://www.cdl.gr'); //cdl.gr
get_domain('http://cdl.gr'); //cdl.gr
get_domain('http://www2.cdl.gr'); //cdl.gr
票数 16
EN

Stack Overflow用户

发布于 2011-09-28 01:33:22

本应100%工作的代码似乎不适合我,我确实对示例打了一点补丁,但发现没有帮助的代码和它的问题。所以我把它改成了几个函数(省去了一直向Mozilla索要列表和删除缓存系统的麻烦)。这已经在一组1000个URL上进行了测试,似乎是有效的。

代码语言:javascript
复制
function domain($url)
{
    global $subtlds;
    $slds = "";
    $url = strtolower($url);

    $host = parse_url('http://'.$url,PHP_URL_HOST);

    preg_match("/[^\.\/]+\.[^\.\/]+$/", $host, $matches);
    foreach($subtlds as $sub){
        if (preg_match('/\.'.preg_quote($sub).'$/', $host, $xyz)){
            preg_match("/[^\.\/]+\.[^\.\/]+\.[^\.\/]+$/", $host, $matches);
        }
    }

    return @$matches[0];
}

function get_tlds() {
    $address = 'http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1';
    $content = file($address);
    foreach ($content as $num => $line) {
        $line = trim($line);
        if($line == '') continue;
        if(@substr($line[0], 0, 2) == '/') continue;
        $line = @preg_replace("/[^a-zA-Z0-9\.]/", '', $line);
        if($line == '') continue;  //$line = '.'.$line;
        if(@$line[0] == '.') $line = substr($line, 1);
        if(!strstr($line, '.')) continue;
        $subtlds[] = $line;
        //echo "{$num}: '{$line}'"; echo "<br>";
    }

    $subtlds = array_merge(array(
            'co.uk', 'me.uk', 'net.uk', 'org.uk', 'sch.uk', 'ac.uk', 
            'gov.uk', 'nhs.uk', 'police.uk', 'mod.uk', 'asn.au', 'com.au',
            'net.au', 'id.au', 'org.au', 'edu.au', 'gov.au', 'csiro.au'
        ), $subtlds);

    $subtlds = array_unique($subtlds);

    return $subtlds;    
}

然后像这样使用它

代码语言:javascript
复制
$subtlds = get_tlds();
echo domain('www.example.com') //outputs: example.com
echo domain('www.example.uk.com') //outputs: example.uk.com
echo domain('www.example.fr') //outputs: example.fr

我知道我应该把它变成一个班级,但是没有时间。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/276516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档