2012-02-20 525 views
36

我需要一个从URL生成纯域名的php函数。因此,如果这些部分存在,则必须从URL中删除http://,www/(斜线)部分。以下是示例输入和输出: 输入 - >http://www.google.com/ |输出 - > google.com
输入 - >http://google.com/ |输出 - > google.com
输入 - > www.google.com/ |输出 - > google.com
输入 - > google.com/ |输出 - > google.com
输入 - > google.com |输出 - > google.com

我检查了parse_url函数,但没有返回我所需要的。 因为,我是PHP的初学者,对我来说很困难。如果您有任何想法,请回答。
Thanx提前。如何从PHP中删除http://,www和斜杠?

+4

这是几十个问题的副本。 – tplaner 2012-02-20 16:08:57

+0

parse_url将保留完整的域名,包括子域名,例如它并没有把www.google.com变成google.com – Gordon 2012-02-20 16:09:55

+1

第二个最高评分的答案在这里(http://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php)可能是最简单的赌注。 – BenOfTheNorth 2012-02-20 16:18:25

回答

57
$input = 'www.google.co.uk/'; 

// in case scheme relative URI is passed, e.g., //www.google.com/ 
$input = trim($input, '/'); 

// If scheme not included, prepend it 
if (!preg_match('#^http(s)?://#', $input)) { 
    $input = 'http://' . $input; 
} 

$urlParts = parse_url($input); 

// remove www 
$domain = preg_replace('/^www\./', '', $urlParts['host']); 

echo $domain; 

// output: google.co.uk 

与所有示例输入正常工作。

+0

以及如果它不是www而是secure.google.com呢? – Gordon 2012-02-20 16:18:55

+0

Yeap,这就是我需要的。非常感谢! – JohnUS 2012-02-20 16:23:16

+2

@戈登:问题陈述'必须删除http://,www和/'。任意子域名不是其中的一部分,如果他需要,它不会起作用。 – webbiedave 2012-02-20 16:24:47

2

试试这个,它会删除你想要的东西(HTTP // ::,www和斜线),但将保留其他子域,如example.google.com

$host = parse_url('http://www.google.com', PHP_URL_HOST); 
$host = preg_replace('/^(www\.)/i', '', $host); 
+0

以及如果它不是www而是secure.google.com会怎么样? – Gordon 2012-02-20 16:18:37

+0

OP特别要求删除http://,www和尾部的斜线,因此我的解决方案仅删除这些内容。其他解决方案可能会非常棘手,可能需要一个异常数据库,例如.uk,.tw域会导致问题。 – h00ligan 2012-02-20 16:22:26

3
if (!preg_match('/^http(s)?:\/\//', $url)) 
    $url = 'http://' . $url; 

$host = parse_url($url, PHP_URL_HOST); 
$host = explode('.', strrev($host)); 
$host = strrev($host[1]) . '.' strrev($host[0]); 

这将返回二级域名,虽然这将是无用的,比如.co.uk域名,所以你可能需要做更多的检查,并包括其他部件,如果strrev($主机[0])是澳大利亚,澳大利亚等。

8

有很多方法抓住一个网址的域名我已经从最短到最长的四种方式发布。

#1

function urlToDomain($url) { 
    return implode(array_slice(explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url)), 0, 1)); 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

#2

function urlToDomain($url) { 
    $domain = explode('/', preg_replace('/https?:\/\/(www\.)?/', '', $url)); 
    return $domain['0']; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

#3

function urlToDomain($url) { 
    $domain = preg_replace('/https?:\/\/(www\.)?/', '', $url); 
    if (strpos($domain, '/') !== false) { 
     $explode = explode('/', $domain); 
     $domain = $explode['0']; 
    } 
    return $domain; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

#4

function urlToDomain($url) { 
    if (substr($url, 0, 8) == 'https://') { 
     $url = substr($url, 8); 
    } 
    if (substr($url, 0, 7) == 'http://') { 
     $url = substr($url, 7); 
    } 
    if (substr($url, 0, 4) == 'www.') { 
     $url = substr($url, 4); 
    } 
    if (strpos($url, '/') !== false) { 
     $explode = explode('/', $url); 
     $url  = $explode['0']; 
    } 
    return $url; 
} 
echo urlToDomain('http://www.example.com/directory/index.php?query=true'); 

的功能上述所有返回相同的响应:example.com

23
$str = 'http://www.google.com/'; 
$str = preg_replace('#^https?://#', '', rtrim($str,'/')); 
echo $str; // www.google.com