从网址中提取域名(包括硬盘)

时间:2010-03-26 22:39:37

标签: php dns subdomain

我正在尝试编写(或只是找到一个现有的)PHP方法,该方法可以获取链接并提取网址。诀窍是,它需要保持在奇怪的领域的重压,如:

www.champa.kku.ac.th 

用人眼看着这个,我仍然猜错了:认为域名是kku.ac.th但是访问时会出现dns错误。

所以任何人都知道从url可靠地提取域名的好方法:

http://site.com/hello.php
http://site.com.uk/hello.php
http://subdomain.site.com/hello.php
http://subdomain.site.com.uk/hello.php
http://www.champa.kku.ac.th/hello.php // and even the one I couldn't tell

3 个答案:

答案 0 :(得分:6)

也许 parse_url 功能可以提供帮助吗?


在您的情况下,使用这些URL,代码的以下部分:

echo parse_url('http://site.com/hello.php', PHP_URL_HOST) . '<br />';
echo parse_url('http://site.com.uk/hello.php', PHP_URL_HOST) . '<br />';
echo parse_url('http://subdomain.site.com/hello.php', PHP_URL_HOST) . '<br />';
echo parse_url('http://subdomain.site.com.uk/hello.php', PHP_URL_HOST) . '<br />';
echo parse_url('http://www.champa.kku.ac.th/hello.php', PHP_URL_HOST) . '<br />';

给出这个输出:

site.com
site.com.uk
subdomain.site.com
subdomain.site.com.uk
www.champa.kku.ac.th

答案 1 :(得分:6)

PHP具有parse_url()功能,可帮助您基本拆分为协议,主机,端口等。

至于在不确定的情况下提取“正确”域名,这是非常难以辨别的,因为有时候,“两部分TLD”是TLD权威机构(例如在英国)的衡量标准,有时是私营企业(例如.uk.com)。我认为您不会维护包含两个部分的顶级域名列表,例如

  • .co.uk
  • .ac.uk
  • .ac.th

这些结局将被视为TLD(顶级级别域名),吞噬第二部分。

这是可靠地区分“两部分顶级域名”的唯一方法,例如.co.uk - server1.ibm.co.uk(其中需要删除两部分.co.uk以确定域名本身)来自server1.ibm.com等常规子域(其中.com需要删除)。

获取许多重要的“两部分TLD”列表的一个很好的起点是speednames.com上的域名搜索(在国家/地区选择“全部”)。更完整的列表可以找到part of the Ruby domainatrix library

答案 2 :(得分:0)

使用Ruby,您可以使用Domainatrix库/ gem

http://www.pauldix.net/2009/12/parse-domains-from-urls-easily-with-domainatrix.html

require 'rubygems'
require 'domainatrix'
s = 'http://www.champa.kku.ac.th/dir1/dir2/file?option1&option2'
url = Domainatrix.parse(s)
url.domain
=> "kku"

很棒的工具! : - )