2012-02-20 18 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のURLからhttp://、www、およびslashを削除するには?

+4

はこれが質問の数十の複製です。 – tplaner

+0

parse_urlはサブドメインを含む完全なドメイン名を保持します。 www.google.comをgoogle.comに変えることはありません – Gordon

+1

ここで2番目に高い評価を得た回答(http://stackoverflow.com/questions/276516/parsing-domain-from-url-in-php)はおそらく最も単純な賭けです。 – BenOfTheNorth

答えて

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

+0

イェップ、それは私が必要なものです。どうもありがとう! – JohnUS

+2

@Gordon:質問は 'http://、wwwと/'を削除する必要があります。任意のサブドメインはその一部ではなく、必要に応じて動作しませんでした。 – webbiedave

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

+0

OPは具体的にはhttp://、wwwと末尾のスラッシュを削除するように要求されました。他の解決策は、扱いにくく、おそらく例外のデータベースが必要になります。たとえば、.twドメインは問題を引き起こします。 – h00ligan

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]); 

strrev場合、これは($ホスト[0])あなたには、いくつかのより多くのチェックを行いたいかもしれないので、それは、たとえば.co.ukドメインの役に立たないだろうが、セカンドレベルドメインを返し、追加の部品が含まれるであろうuk、auなどです

8

URLからドメインを取得する方法はたくさんありますが、最短から最長まで4つの方法で投稿しています。

#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 
関連する問題