Extract top domain from string php

here it is

<?php

$sitelink="http://www.somewebsite.com/product/3749875/info/overview.html";

$domain_pieces = explode(".", parse_url($sitelink, PHP_URL_HOST));

$l = sizeof($domain_pieces);

$secondleveldomain = $domain_pieces[$l-2] . "." . $domain_pieces[$l-1];

echo $secondleveldomain;

note that this is not probably the behavior you are looking for, because, for hosts like

stackoverflow.co.uk

it will echo "co.uk"


see:

http://publicsuffix.org/learn/

http://www.dkim-reputation.org/regdom-libs/

http://www.dkim-reputation.org/regdom-lib-downloads/ <-- downloads here, php included


You need package that uses Public Suffix List, only in this way you can correctly extract domains with two-, third-level TLDs (co.uk, a.bg, b.bg, etc.) and multilevel subdomains. Regex, parse_url() or string functions will never produce absolutely correct result.

I recomend use TLD Extract. Here example of code:

$extract = new LayerShifter\TLDExtract\Extract();

$result = $extract->parse('http://www.somewebsite.com/product/3749875/info/overview.html');
$result->getSubdomain(); // will return (string) 'www'
$result->getHostname(); // will return (string) 'somewebsite'
$result->getSuffix(); // will return (string) 'com'
$result->getRegistrableDomain(); // will return (string) 'somewebsite.com'

With parse_url($url)

<?php
$url = 'http://username:password@hostname/path?arg=value#anchor';

print_r(parse_url($url));
?>

The above example will output:

Array
(
    [scheme] => http
    [host] => hostname
    [user] => username
    [pass] => password
    [path] => /path
    [query] => arg=value
    [fragment] => anchor
)

Using thos values

echo parse_url($url, PHP_URL_HOST); //hostname

or

$url_info = parse_url($url);
echo $url_info['host'];//hostname

2 complexe url

$url="https://www.example.co.uk/page/section/younameit";
or
$url="https://example.co.uk/page/section/younameit";

To get "www.example.co.uk":

$host=parse_url($url, PHP_URL_HOST);

To get "example.co.uk" only

$parts = explode('www.',$host);
$domain = $parts[1];

// ...or...

$domain = ltrim($host, 'www.')

If your url includes "www." or not you get the same end result, i.e. "example.co.uk"

Voilà!

Tags:

Php

String