“[浏览器版本]及更高版本”的用户代理字符串

时间:2012-08-20 15:12:11

标签: php http user-agent

我试图通过指定在HTTP_USER_AGENT字符串对应于[浏览器版本x]或更高版本时加载包含CSS动画的远程样式表来避免大量PHP代码。例如,知道Chrome 19及更新版本支持CSS动画,代码会检测Chrome版本是否大于19,并加载相应的样式表。
这完全可以使用PHP吗?

3 个答案:

答案 0 :(得分:2)

这是一个解决方案,但您必须不时更新解析器以获取用户代理字符串以包含其中的更改。 使用代理字符串没有商定的标准,因此通常解析用户代理字符串非常困难,通常归结为查找表。

更加面向未来的方法是使用例如Modernizr在客户端检测CSS动画的支持,然后根据结果加载样式表。如果某些浏览器开发人员希望将来更改(用户代理字符串的结构),那么你就不在乎了。

答案 1 :(得分:1)

如果您必须使用PHP,那么就有一个内置函数get_browser()可以满足您的需求。

但是......如果你使用get_browser(),请注意这是解决问题的一个不好的方法。

为了使用此功能,您必须拥有最新的browsecap.ini文件,该文件基本上是一个文本文件,用于定义每个浏览器和每个版本的功能。

这方面的缺点显而易见:

  • 您必须首先查找并安装最新的browsecap.ini副本。
  • 每次发布​​新浏览器时都必须更新它(新版本经常出现,所以这是一项非常重要的任务)。
  • 可能不包含您要检测的所有功能。
  • 如果用户屏蔽其用户代理字符串,它将会中断。

出于所有这些原因,我强烈建议不要使用get_browser(),或者实际上任何基于PHP或服务器端的解决方案。

相反,正如其他人所说,您应该使用Modernizr库进行调查。这是您在网站上安装的Javascript库,可在浏览器中执行功能检测。它永远不会过时,因为它特别关注功能是否受支持,因此它并不关心实际的浏览器是什么。

答案 2 :(得分:0)

您可能希望考虑使用设备描述存储库(DDR)。这是一个应用程序或Web服务,您可以在其中传递用户代理字符串并获取该用户代理的已知功能列表。

这样做的好处是,您不必在新用户代理出现时不断更新自己的代码。

我最近在Dino Esposito's MSDN article on Mobile Site Development读到了有关DDR的内容。他对DDR的功能和性质有很好的评论。

我意识到你正在使用PHP,但连接/查询DDR应该与语言无关。

只是一个想法,希望这会有所帮助。