目前日本的手机运营商主要是三大运营商:docomo、au和softbank。
其实这篇文章是2011年发布的,现在(2013年)网站浏览数据显示,移动客户端占据了将近40%的流量,而早期的非智能机访问仅有5%左右(这其中基本上只见过docomo了),剩下将近55%是普通PC。
在手机web开发中,获取和判定客户终端的类型都是通过分析”user-agent“里的信息来实现的。各运营商在user-agent里包含了的对应文字列如下:
docomo:「DoCoMo」
au・TU-KA:「UP.Browser」
softbank:「J-PHONE」、「Vodafone」、「SoftBank」
通过上面这些,可以判断手机的运营商类型。
注意:有一部分的Vodafone手机的user-agent里耶包含了「UP.Browser」,所以判断字符的时候,应该是判断user-agent是什么开头的。
1.日本各大运营商的user-agent格式
(1)i-mode [NTT DoCoMo(R)]
i-mode对应HTML1.0
DoCoMo/1.0/机器类型名
i-mode对应HTML2.0
DoCoMo/1.0/机器类型名/运营商
i-mode对应HTML3.0
DoCoMo/1.0/机器类型名运营商/机器个体识别
FOMA
DoCoMo/2.0<SP>机器类型名(运营商;机器个体识别)
i-mode对应カーナビシリーズ
DoCoMo/1.0/机器类型名
(2)J-PHONE [J-PHONE(R)]
J-スカイ对应机器类型:
J-PHONE/浏览器版本/机器类型名
ステーション对应机器类型
J-PHONE/浏览器版本/机器类型名
J-スカイ パケット对应机器类型
J-PHONE/浏览器版本/机器类型名/机器个体识别 制造编号/user-agent版本号 Java情报(Profile/ Configuration) Java扩展版本(Ext-Profile)
(3)au [KDDI(R)]
cdmaOne3000,5000 Series
KDDI-机器种类名 浏览器名/浏览器版本 服务器名
cdmaOne200,300,400,1000Series,Digital,TU-KA
浏览器名-机器种类名 服务器名
2.一些user-agent的例子
(1)docomo
type1 (MOVA)
DoCoMo/1.0/N503i/c10
设定了唯一ID时
DoCoMo/1.0/N503i/c10/ser12345678901
type2 (FORM)
DoCoMo/2.0 N901iS(c100;TB;W24H12)
设定了唯一ID时
DoCoMo/2.0 N901iS(c100;TB;W24H12;ser123456789012345;icc12345678901234567890)
P-07A
DoCoMo/2.0 P07A3(c500;TB;W24H15)
也有些是没有/c10或(c100),而直接以机器类型名结束的。
(2)au
旧type
UP.Browser/3.04-SN12 UP.Link/3.4.4
新type
KDDI-HI21 UP.Browser/6.0.2.254 (GUI) MMP/1.1
在user-agent里没有直接包含机器种类名,而是包含了device id,可以在运营商的网站上找到device id和机器种类名的对照。上面的例子中,SN12和HI21就是device id。网上应该有通过device id获取机器种类名的library。
(3)softbank
SoftBank 4-2 Series(JPHONE时代的)
J-PHONE/3.0/J-SH07
SoftBank 6-5 Series(JPHONE时代的)
J-PHONE/4.0/J-SH51/SN12345678901 SH/0001a Profile/MIDP-1.0 Configuration/CLDC-1.0
SoftBank 3G Series(vodafone时代的)
Vodafone/1.0/V904SH/SHJ001/SN123456789012345 Browser/VF-NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
SoftBank 3G Series(softbank时代的)
SoftBank/1.0/910T/TJ001/SN123456789012345 Browser/NetFront/3.3 Profile/MIDP-2.0 Configuration/CLDC-1.1
基本上、user-agent的构成是:J-PHONE(or Vodafone or SoftBank)/浏览器版本/机器种类名/其它
3.限制手机以外(普通电脑)等访问的方法
一是,可以通过user-agent内容来判断,但是http访问的头信息是可以人为模拟的。
二是,通过IP判断(即在服务器上的.htaccess里或者代码里过滤),跟大运营商的IP都有自己的范围,同时,这些范围信息是对外开放的。
各大运营商的IP范围信息参考:http://memorva.jp/memo/mobile/allow_ip.php
伪装手机访问的方法参考:http://memorva.jp/memo/mobile/ua_uid_test.php
4.host名
在判断运营商时,如果加上host的判断,会更加精确。(但是DNS的正确性不能保证)
docomo
docomo.ne.jp
au
ezweb.ne.jp
softbank
jp-d.ne.jp jp-h.ne.jp jp-t.ne.jp jp-c.ne.jp jp-k.ne.jp jp-r.ne.jp jp-n.ne.jp jp-s.ne.jp jp-q.ne.jp
5.运营商判别的PHP示例代码(其他java prel等代码可以参考底部原文链接)
$agent = $_SERVER['HTTP_USER_AGENT']; if(ereg("^DoCoMo", $agent)){ }else if(ereg("^J-PHONE|^Vodafone|^SoftBank", $agent)){ }else if(ereg("^UP.Browser|^KDDI", $agent)){ }
6.机器类型判别PHP示例代码(取得机器类型名)
docomo
$agent = $_SERVER{'HTTP_USER_AGENT'}; if(strpos($agent, "DoCoMo/1.0") >= 0 && strpos($agent, "/", 11) >= 0){ $device = substr($agent, 11, (strpos($agent, "/", 11) - 11)); }elsif(strpos($agent, "DoCoMo/2.0") >= 0 && strpos($agent, "(", 11) >= 0){ $device = substr($agent, 11, (strpos($agent, "(", 11) - 11)); }else{ $device = substr($agent, 11); }
au(两种type都能取得)
$agent = $_SERVER{'HTTP_USER_AGENT'}; $device = substr($agent, (strpos($agent, "-") + 1), (strpos($agent, " ") - strpos($agent, "-") - 1));
softbank(只有通过x-jphone-msname的才能取得)
$device = $_SERVER{'HTTP_X_JPHONE_MSNAME'};
转自:http://blog.csdn.net/lian_zhihui1984/article/details/6828510
转自:http://memorva.jp/memo/mobile/http_user_agent.php