再补充一下,
子域名的级数是未知的,也就是有可能是二级子域名,也有可能是三级域名。 也可能是更多。 并且域名的后缀也是未知的,有可能是.com也有可能是.com.cn 也有可能是.net 后缀也不仅仅只是.com或.net,全世界好像有300多个后缀吧,也是未知的。
子域名的级数是未知的,也就是有可能是二级子域名,也有可能是三级域名。 也可能是更多。 并且域名的后缀也是未知的,有可能是.com也有可能是.com.cn 也有可能是.net 后缀也不仅仅只是.com或.net,全世界好像有300多个后缀吧,也是未知的。
'ac', 'ad', 'ae', 'aero', 'af', 'ag', 'ai', 'al', 'am', 'an', 'ao',
'aq', 'ar', 'arpa', 'as', 'asia', 'at', 'au', 'aw', 'ax', 'az', 'ba', 'bb',
'bd', 'be', 'bf', 'bg', 'bh', 'bi', 'biz', 'bj', 'bm', 'bn', 'bo',
'br', 'bs', 'bt', 'bv', 'bw', 'by', 'bz', 'ca', 'cat', 'cc', 'cd',
'cf', 'cg', 'ch', 'ci', 'ck', 'cl', 'cm', 'cn', 'co', 'com', 'coop',
'cr', 'cu', 'cv', 'cx', 'cy', 'cz', 'de', 'dj', 'dk', 'dm', 'do',
'dz', 'ec', 'edu', 'ee', 'eg', 'er', 'es', 'et', 'eu', 'fi', 'fj',
'fk', 'fm', 'fo', 'fr', 'ga', 'gb', 'gd', 'ge', 'gf', 'gg', 'gh',
'gi', 'gl', 'gm', 'gn', 'gov', 'gp', 'gq', 'gr', 'gs', 'gt', 'gu',
'gw', 'gy', 'hk', 'hm', 'hn', 'hr', 'ht', 'hu', 'id', 'ie', 'il',
'im', 'in', 'info', 'int', 'io', 'iq', 'ir', 'is', 'it', 'je', 'jm',
'jo', 'jobs', 'jp', 'ke', 'kg', 'kh', 'ki', 'km', 'kn', 'kp', 'kr', 'kw',
'ky', 'kz', 'la', 'lb', 'lc', 'li', 'lk', 'lr', 'ls', 'lt', 'lu',
'lv', 'ly', 'ma', 'mc', 'md', 'me', 'mg', 'mh', 'mil', 'mk', 'ml', 'mm',
'mn', 'mo', 'mobi', 'mp', 'mq', 'mr', 'ms', 'mt', 'mu', 'museum', 'mv',
'mw', 'mx', 'my', 'mz', 'na', 'name', 'nc', 'ne', 'net', 'nf', 'ng',
'ni', 'nl', 'no', 'np', 'nr', 'nu', 'nz', 'om', 'org', 'pa', 'pe',
'pf', 'pg', 'ph', 'pk', 'pl', 'pm', 'pn', 'pr', 'pro', 'ps', 'pt',
'pw', 'py', 'qa', 're', 'ro', 'rs', 'ru', 'rw', 'sa', 'sb', 'sc', 'sd',
'se', 'sg', 'sh', 'si', 'sj', 'sk', 'sl', 'sm', 'sn', 'so', 'sr',
'st', 'su', 'sv', 'sy', 'sz', 'tc', 'td', 'tel', 'tf', 'tg', 'th', 'tj',
'tk', 'tl', 'tm', 'tn', 'to', 'tp', 'tr', 'travel', 'tt', 'tv', 'tw',
'tz', 'ua', 'ug', 'uk', 'um', 'us', 'uy', 'uz', 'va', 'vc', 've',
'vg', 'vi', 'vn', 'vu', 'wf', 'ws', 'ye', 'yt', 'yu', 'za', 'zm',
'zw'
);
来源于Zend_Validate_Hostname 俺看差不多 究竟怎么匹配就是相对容易的事了
这是顶级域名 .com.cn 判断下第二个是不是在这个范围中就应该可以了
那么访问的时候是要先搜索.cn的dns服务器里面有没有www.aaa.com.cn的记录(一般来讲是没有,会返回.com.cn的dns服务器)
没有的话要搜索.com.cn的服务器里面有没有记录(这时候返回dns23.hichina.com)
然后dns23.hichina.com返回www.aaa.com.cn的IP
然后才转向那个IP从规则上面来看的话,似乎根本没有后缀那种东西...写程序的话,只能抽象的模拟一下了...LZ写完了,写成个class 发上来共享一下吧...帮你找bug
preg_match("/([[:alnum:]-]+\.)+([[:alnum:]-]+\.(net|com|biz)(\.[[:alpha:]]+){0,1})/",$text,$matches);
echo $matches[2];
echo $matches[2];
对于标准的数据应该可以应付了。
echo $matches[2];
提取net.cn,com这样的域名
preg_match("/([[:alnum:]-]+\.)+(?!com|net|org|biz)([[:alnum:]-]+\.[[:alpha:]]+)[^[:alpha:]-\.]/",$text,$matches);
echo $matches[2];
提取som.cn这样的域名。
<?php
$url = "aa.bb.cc.sina.com";
$reg = "/.*\.(.+?)\.(.+?)$/";
preg_match($reg,$url,$matches);
echo $matches[1];
?>
<?php
$host=$_REQUEST['host'];
preg_match("/[^\.\/]+\.([^\.\/]+(\.(com|net|org|gov|edu)\.cn)?)$/i", $host, $matches);
if(substr_count($matches[1],".")>0) $true_domain=$matches[1]; else $true_domain=$matches[0];
echo "domain name is: {$true_domain}\n";
?>