如何在CodeIgniter中获取Chrome浏览器的精确版本
解决CodeIgniter获取Chrome精确版本的问题
CodeIgniter自带的User_agent库对Chrome版本的解析做了截断处理,导致只能拿到x.x.0.0格式的版本号。可以通过以下两种方式解决:
方法一:直接解析原始User-Agent字符串
绕过User_agent库的version()方法,直接从完整的User-Agent字符串中用正则提取精确版本:
$this->load->library('user_agent'); // 获取完整的User-Agent字符串 $user_agent_str = $this->agent->agent_string(); // 正则匹配Chrome的完整版本号 preg_match('/Chrome\/(\d+\.\d+\.\d+\.\d+)/', $user_agent_str, $matches); // 优先用匹配到的精确版本,匹配失败则 fallback 到原方法的结果 $exact_version = isset($matches[1]) ? $matches[1] : $this->agent->version();
方法二:扩展User_agent库(持久化修改)
为了避免每次重复写正则,可以通过自定义扩展类重写浏览器版本解析逻辑:
- 在
application/libraries目录下创建MY_User_agent.php文件 - 继承CI_User_agent类,重写
_browser()方法中关于Chrome的解析部分:
class MY_User_agent extends CI_User_agent { protected function _browser() { parent::_browser(); // 重新解析Chrome版本 $agent = $this->agent_string(); if (preg_match('/Chrome\/(\d+\.\d+\.\d+\.\d+)/', $agent, $match)) { $this->browser = 'Chrome'; $this->version = $match[1]; } return $this->browser; } }
之后正常加载User_agent库时,会自动使用扩展后的类,调用$this->agent->version()就能拿到精确版本。
内容的提问来源于stack exchange,提问作者Linu S
相关产品推荐
相关产品推荐

