在写电商圈排名系统时,其中一个重要的想法就是要判断顶级域名,即一级域名的。 因为在电商圈百度排名里,各种各样的URL都是有的,如:
- 二级域名:q.eb.cn
- 内页:http://yun.im/yunseo/621.html
其它等等。
而在统计排名时,只计算顶级域名的。其它非顶级域名则排除。 所以关键一步就是判断顶级域名的正确性。前期的代码有些BUG,不过现在已经修复了。分享一些几个自定义的函数。
用PHP判断一级域名
第一步,先把域名变为短域名,从wordpress学来的。
如把http://yun.im/变成yun.im,或是把http://yun.im/blog变成yun.im/blog,或是把http://www.liucheng.name/ 变为 liucheng.name
function yunim_short_url($url){ $short_url = str_replace('http://', '', $url); $short_url = preg_replace('/^www\./i', '', $short_url); if ('/' == substr($short_url, -1)) { $short_url = substr($short_url, 0, -1); } return $short_url; }
第二步,对短域名进行过滤。把一些组合的域名后缀替换一下先。如.com.cn, .net.cn, .com.hk等等组合的域名后缀。根据需要可以增加。
function yunim_special_url($short_url){ ## com.cn net.cn gov.cn org.cn com.hk com.tw $special_url = array('.com.cn', '.net.cn', '.gov.cn', '.org.cn', '.com.hk', '.com.tw'); ##这里根据需要继续添加 preg_match_all('/\./', $short_url, $match); if( count($match[0])==2 && !preg_match('/\//', $short_url) ) { $short_url = str_replace( $special_url, '.com', $short_url ); } return $short_url; }
第三步,替换完了后,再对域名进行判断。没有斜杠(/),以及点(.)的数量才1个的。就判断为顶级域名,即一级域名。
function yunim_is_url($short_url){ ##判断域名 是否是一级域名 $short_url = yunim_special_url($short_url); preg_match_all('/\./', $short_url, $match); if( count($match[0])==1 && !preg_match('/\//', $short_url) ) { return 1; }else{ return 0; } }
例子:
$url_1 = 'http://yun.im/'; ##或是$url_2 = 'http://q.eb.cn/'; echo yunim_is_url(yunim_short_url($url_1));
如果是url_1的话就会输出1,即TRUE,如果是url_2的话就会输出0,即FALSE。
大功告成。 不过还是觉得有些麻烦的样子。如果有好的建议,欢迎留言。
《 “用PHP判断顶级域名” 》 有 51 条评论
厉害。佩服。
厉害 学习了!!!!!
这个真是没听说过的方法
学习,必须的
又学了一手!
混哥脸熟 嘿嘿
这个纯技术活 ,呵呵,高深
你辛苦了,这个需要的技术实力
柳城同学的php技术活就是不错
又学习了一招,继续努力 [呲牙]
厉害了啊。呵呵
不错,支持一个
很好,不过这样的函数应该不会有实际应用的机会
呵呵。那是你用得少嘛。网上一搜。大把人在问这个问题的
有点深奥啊 看不懂啊
相当深奥,基本上看不懂。
没看太明白,有点复杂。
有点难度。
没看太明白,有点复杂
说实在的,我也看不懂,呵。
function getdomain(){
$host=$_SERVER[HTTP_HOST];
$host=strtolower($host);
if(strpos($host,’/’)!==false){
$parse = @parse_url($host);
$host = $parse[’host’];
}
$topleveldomaindb=array(’com’,’edu’,’gov’,’int’,’mil’,’net’,’org’,’biz’,’info’,’pro’,’name’,’museum’,’coop’,’aero’,’xxx’,’idv’,’mobi’,’cc’,’me’);
$str=’’;
foreach($topleveldomaindb as $v){
$str.=($str ? ’|’ : ’’).$v;
}
$matchstr=”[^.]+.(?:(“.$str.”)|w{2}|((“.$str.”).w{2}))$”;
if(preg_match(“/”.$matchstr.”/ies”,$host,$matchs)){
$domain=$matchs[’0’];
}else{
$domain=$host;
}
return $domain;
}
搞来搞去。和这段代码是一样的。。
好深奥呢
很好。。。支持
本文详细出处参考:http://liucheng.name/1810/
不错。顶你。
oh,我只会Java,很想学PHP,但是木有那么多的时间
技术高深啊!我们也学过php,我觉得要学好这PHP需要很强的脑细胞。博主真厉害
看的头都大了,都是代码啊
这是程序吧?看晕了!
这个不错。。。
很实用的代码
有收获!
这样都行啊,厉害。
很好,太原早教表示支持www.tymtsr.com
利用这个函数可以实现301重定向吗?就是判断主域名后直接调转么根域名。。
都转向主域名不见得好吧。
博主真厉害 什么都懂 呵呵
php估计也用了几年了。。很熟啊。
三W后面的都是一级域名吧!
PHP 初级,也来学习了
学习学习。。对这个还不太了解。
凡是我看不懂的,就是很好的。所以这篇文章我觉得很好呀 [呲牙]
谢谢分享啊!博主
博主辛苦了啊
多谢了,我收藏起来研究一下
哈哈··看看学习了 ·
博主是程序员出身啊!呵呵,我们常人可是看不懂!
深奥啊
我就收藏了,多谢分享
[呲牙] 厉害了啊。呵呵
学习了,收藏 [强]
来学习了!!!!!