如何在PHP中解析URL中的域名?我似乎需要一个国家域名数据库。
示例:
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
可以使用whois请求吗?
修改:包含.tr
(www.nic.tr
,www.tsk.tr
)的域名很少,其他域名如您所知:www.something.com.tr
,www.something.org.tr
此外,没有www.something.com.bg
,www.something.org.bg
。他们www.something.bg
就像德国人的.de
但有www.something.a.bg
,www.something.b.bg
因此a.bg
,b.bg
,c.bg
等等。 (a.bg
就像co.uk
)
网上必须有这些顶级域名的列表。
检查Internet Explorer中的网址http://www.agrotehnika97.a.bg/
是如何着色的。
检查
www.google.co.uk<br>
www.google.com.tr<br>
www.nic.tr<br>
www.tsk.tr
答案 0 :(得分:2)
域名存储在$_SERVER['HTTP_HOST']
。
编辑:我相信这会返回整个域名。要获得顶级域名,您可以这样做:
// 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;
答案 1 :(得分:1)
您可以使用parse_url()
将其拆分并获得所需内容。
这是一个例子......
$url = 'http://www.google.com/search?hl=en&source=hp&q=google&btnG=Google+Search&meta=lr%3D&aq=&oq=dasd'; print_r(parse_url($url));
会回应......
Array ( [scheme] => http [host] => www.google.com [path] => /search [query] => hl=en&source=hp&q=google&btnG=Google+Search&meta=lr%3D&aq=&oq=dasd )
答案 2 :(得分:1)
我估计你需要一个域名后使用的所有后缀的列表。 http://publicsuffix.org/list/提供当前使用的所有后缀的最新(或者他们声称)。 该列表实际上是here 现在的想法是让你将该列表解析为一个结构,不同的级别由点分开,从结束级别开始:
所以例如域名: com.la com.tr com.lc
你最终得到:
[la]=>[com]
[lc]=>[com]
等...
然后你从base_url获得主机(通过使用parse_url),然后你用点来爆炸它。然后从最后一个开始,将值与结构进行匹配:
所以对于google.com.tr,你首先要匹配tr,然后是com,那么一旦你进入谷歌就不会找到匹配,这就是你想要的......
答案 3 :(得分:1)
Regex和parse_url()不是您的解决方案。
您需要使用Public Suffix List的软件包,只有这样您才能正确提取具有二级,三级TLD(co.uk,a.bg,b.bg等)的域。我建议使用TLD Extract。
这里是代码示例:
$extract = new LayerShifter\TLDExtract\Extract();
$result = $extract->parse('http://subsub.sub.google.com.tr');
$result->getRegistrableDomain(); // will return (string) 'google.com.tr'