Oprea的怪异识别码
我打算重新设计一个博客引导页,在里面设计一个小彩蛋。通过PHP识别访客所用的浏览器,并输出不同的欢迎语。省时起见,在网上搜索了一段代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 8.0")) echo "MSIE 8"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 7.0")) echo "MSIE 7"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE 6.0")) echo "MSIE 6"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/3")) echo "Firefox 3"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox/2")) echo "Firefox 2"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Chrome")) echo "Google Chrome"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Safari")) echo "Safari"; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Opera")) echo "Opera"; else echo $_SERVER["HTTP_USER_AGENT"]; |
这段代码的意思是根据浏览器识别码来控制输出的内容,在IE、Firefox,甚至Oprea9里都测试正常,可是用Opera10测试时却返回了Opera/9.80 (Windows NT 5.1; U; zh-cn) Presto/2.2.15 Version/10.00也就是浏览器的原始识别码(其实这段代码可以在Opera地址栏里输入“opera:about”看到)。换句话说,上面那段程序不能正确检测出Opera10。
Opera10有个很奇怪的地方,大家留意一下返回的代码,会发现Opera是9.80,但Version却是10.00。
这里面有个小故事:
Opera 的工程师在测试中发现,Opera 10 Alpha 在很多老网站上的运作很不正常。原来,有很多网站使用了“浏览器嗅探”技术,也就是说网站会针对不同的浏览器提供不同的内容或功能。然而不幸的是,这些网站无法识别两位数的浏览器版本号,于是 Opera 就成了首当其冲的受害者——它们把 Opera 10.0 误认为是 Opera 1.0,并因此向 Opera 10 提供不完整的功能,甚至有些网站干脆拒绝 Opera 10 的访问。
这当然是 Opera 不愿意看到的。于是,Opera 的工程师们决定,将用户代理信息中的版本号定格在 9.8,并另外启用 Version 字段来标识真正的版本号。当然他们也考虑过选用 9.99 这个最接近 10 的可用作版本号的数字,不过出于预留空间的考虑,最终还是决定采用 9.8 作为象征性的版本号——它正好介于(Opera 9 的最后一个版本号)9.6 与 10 之间。
于是我开始修改程序,却发现用Opera/9.80也无法识别出Opera10.
经过几次修改和测试,我最后采用了以下方法识别Opera10。
1 2 | else if(strpos($_SERVER["HTTP_USER_AGENT"],"Version/10.00")) echo "Opera 10"; |
可是这个方法有一个极大的弊端,就是Opera10升级到10.XX就不能使用了。谁能告诉我在PHP里,应该怎么识别Opera10呢?






opera现在我没怎么用了
呵呵。
出第十版了?升级挺快。
我也没用过
Opera用过一段时间,还是不习惯,,,
呵呵一直都没注意过浏览器识别问题,这次算是涨知识了
我也基本不用opera
出现一个课题了
oprea10挺好用的。
一直在用ff
现在很少用这个浏览器了
以前用得多,现在用得少了,感觉不好用,
现在我都是用chrome,哎,围观并飘过,等牛人解答你的问题啦
用Chrome以后firefox就好久没工作过了,浏览器我还是喜欢简简单单的…
考虑用正则表达式
@yinheli
终于有高手解答了,谢谢。我要恶补一下正则了
为什么要欢迎语呢?
这个问题也是出于无奈
其实选择9.8不止是因为这个数字介于9.6和10之间
也是为以后的版本留点空间,这种状况估计短时间不会改变
10.10过后的下一代可能是9.85
现在的Opera最新正式版是10.01 1844
最新测试版是10.10 1880
所以你那个方法显然不行。。可惜我不会php,帮不上忙
不懂这个 帮不上忙
确实不怎么习惯使用这个浏览器
Opera10这个就火星了…
这是什么玩意?怎么看不懂?
来顶顶
你技术越来越娴熟了。
太专业太复杂,我只能说我是来灌的,飘~~~
@网络生活 我现在也基本不用OP,基本用FF。
真是一个小细节,是不是说明Opera太老了?还是太先进了呢?看来高版本也不一定是件福因。呵呵