How I can parse a domain from URL in PHP? It seems that I need a country domain database.
Examples:
http://mail.google.com/hfjdhfjd/jhfjd.html -> google.com
http://www.google.bg/jhdjhf/djfhj.html -> google.bg
http://www.google.co.uk/djhdjhf.php -> google.co.uk
http://www.tsk.tr/jhjgc.aspx -> tsk.tr
http://subsub.sub.nic.tr/ -> nic.tr
http://subsub.sub.google.com.tr -> google.com.tr
http://subsub.sub.itoy.info.tr -> itoy.info.tr
Can it be done with whois request?
Edit: There are few domain names with .tr
(www.nic.tr
, www.tsk.tr
) the others are as you know: www.something.com.tr
, www.something.org.tr
Also there is no www.something.com.bg
, www.something.org.bg
. They are www.something.bg
like the Germans' .de
But there are www.something.a.bg
, www.something.b.bg
thus a.bg
, b.bg
, c.bg
and so on. (a.bg
is like co.uk
)
There on the net must be list of these top domain names.
Check how is coloured the url http://www.agrotehnika97.a.bg/
in Internet Explorer.
Check also
www.google.co.uk<br>
www.google.com.tr<br>
www.nic.tr<br>
www.tsk.tr
The domain is stored in $_SERVER['HTTP_HOST']
.
EDIT: I believe this returns the whole domain. To just get the top-level domain, you could do this:
// Add all your wanted subdomains that act as top-level domains, here (e.g. 'co.cc' or 'co.uk')
// As array key, use the last part ('cc' and 'uk' in the above examples) and the first part as sub-array elements for that key
$allowed_subdomains = array(
'cc' => array(
'co'
),
'uk' => array(
'co'
)
);
$domain = $_SERVER['HTTP_HOST'];
$parts = explode('.', $domain);
$top_level = array_pop($parts);
// Take care of allowed subdomains
if (isset($allowed_subdomains[$top_level]))
{
if (in_array(end($parts), $allowed_subdomains[$top_level]))
$top_level = array_pop($parts).'.'.$top_level;
}
$top_level = array_pop($parts).'.'.$top_level;