Php 需要web应用程序的最低浏览器版本
我有一个PHP的web应用程序,它在前端需要一些更现代的浏览器功能,比如。如网站上所述,只有非常新的浏览器支持此功能。我需要依赖的一些HTML5特性也是如此 我现在想要实现的是,使用UserAgent字符串检查服务器端用户正在运行的浏览器,如果它低于特定版本,则将其重定向到信息页面,通知他应该使用更新的浏览器 我已经尝试了一段时间来设置适当的正则表达式来检查UA字符串。然而,我有一点被卡住了,因为浏览器制造商并不总是保持一个干净的模式——比如说,对于Opera浏览器,我至少需要12个版本Php 需要web应用程序的最低浏览器版本,php,user-agent,dom4,Php,User Agent,Dom4,我有一个PHP的web应用程序,它在前端需要一些更现代的浏览器功能,比如。如网站上所述,只有非常新的浏览器支持此功能。我需要依赖的一些HTML5特性也是如此 我现在想要实现的是,使用UserAgent字符串检查服务器端用户正在运行的浏览器,如果它低于特定版本,则将其重定向到信息页面,通知他应该使用更新的浏览器 我已经尝试了一段时间来设置适当的正则表达式来检查UA字符串。然而,我有一点被卡住了,因为浏览器制造商并不总是保持一个干净的模式——比如说,对于Opera浏览器,我至少需要12个版本 Op
- Opera 12.14示例1:Opera/9.80(Windows NT 6.0)Presto/2.12.388版本/12.14
- Opera12.14示例2:Mozilla/5.0(Windows NT 6.0;rv:2.0)Gecko/20100101 Firefox/4.0 Opera12.14
这也可能是Firefox4.0 - Opera11.51:Mozilla/5.0(兼容;MSIE 9.0;Windows NT 6.1;de)Opera11.51
这也可能是Internet Explorer 9.0
useragentstring.com有一个API,每当用户访问欢迎页面和/或登录时,我都可以查询该API。我不确定这在安全性和应用程序性能方面是否是个好主意 方法2:
PHP的get_browser()函数与browscap.ini结合使用。这种方法无法区分桌面浏览器和移动浏览器 方法3:
方法2的另一种替代方法是,您可以定义自己的browsercap.ini,而无需依赖服务器上您无权访问的某个位置的browsercap.ini 还是其他方法
我很乐意发表一些评论。现在,许多开发人员使用JavaScript来查询浏览器中是否有可用的功能,而不是保留自己的用户代理和功能数据库(这可能很难做到正确,也很难保持更新)
这样做相对简单。深入探讨了为什么这种方法是一个好主意,并展示了一些在不想依赖库的情况下进行功能检测的替代方法。为什么要在服务器上执行所有操作?使用javascript或,并使用javascript向用户显示消息。我过去曾用过这首小曲(节选):
(见附件)。它还不完整,但它足以满足我当时的需要。除此之外,客户端的功能检测无疑是一个方向——不管是css、html还是javascript(即,下降了1/3)。我喜欢使用正则表达式-但不能依赖浏览器供应商在不同版本之间保持UA字符串相同(更不用说遵循实际标准了!请参阅:useragentstring.com/pages/useragentstring.php)。不要检查UserAgent,使用JavaScript检查浏览器中是否支持该功能。如果您检测不正确,您将极大地挫败用户。感谢所有的答案,并为我指明了正确的方向。我已经在使用Modernizer了,但没有想到正确的方法——现在我将进行客户端功能检测,然后如果用户缺少功能,将其重定向到错误页面。
var browsers = [{
browser : "Opera",
css : "o",
engine : "Presto",
rex : {
eng : /(?:Gecko|Presto)\/([0-9.]*)/,
brw : /.+(?:Opera|Version).([0-9\.]+)/
},
ever : 0,
bver : 0
},{}]
var UA = function(p_ua) {
var curr, i;
for (i in browsers) {
var r = new RegExp(browsers[i].browser);
if (p_ua.match(r) && (!!browsers[i].rex)) {
curr = browsers[i];
curr.ever = curr.rex.eng.exec(p_ua)[1] || curr.rex.eng.exec(p_ua)[0];
curr.bver = curr.rex.brw.exec(p_ua)[1] || curr.rex.brw.exec(p_ua)[0];
break;
}
}
return curr;
}