我正在尝试编写(或只是找到一个现有的)PHP方法,它可以获取链接并提取URL.诀窍是,它需要保持在奇怪的领域的重压,如:
www.champa.kku.ac.th
Run Code Online (Sandbox Code Playgroud)
用人眼看着这个,我仍然猜错了:认为域名会是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
Run Code Online (Sandbox Code Playgroud)
也许这个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 />';
Run Code Online (Sandbox Code Playgroud)
给出这个输出:
site.com
site.com.uk
subdomain.site.com
subdomain.site.com.uk
www.champa.kku.ac.th
Run Code Online (Sandbox Code Playgroud)
PHP有parse_url()函数,可以帮助您基本拆分协议,主机,端口等.
至于在不确定的情况下提取"正确"域名,这是非常难以辨别的,因为有时候,"两部分TLD"是TLD权威机构(例如在英国)的衡量标准,有时也是私营企业(例如.uk.com).我认为你不会维护包含两个部分的顶级域名列表
这些结局将被视为TLD(顶级域名),吞噬第二部分.
这是可靠地分辨"两部分顶级域名"的唯一方法.co.uk- 在哪里server1.ibm.co.uk(.co.uk需要删除两部分以确定域本身)来自常规子域server1.ibm.com(如.com需要删除).
获取许多重要"两部分TLD"列表的一个很好的起点是speednames.com上的域名搜索(在国家/地区选择"全部").可以在Ruby domainatrix库中找到更完整的列表.