用户代理类

用户代理(User Agent)类提供了一些方法来帮助你识别正在访问你的站点的浏览器、移动设备或机器人的信息。另外,你还可以通过它获取 referrer 信息,以及支持的语言和字符集信息。

使用用户代理类

初始化类

正如 CodeIgniter 中的其他类一样,在你的控制器中使用 $this->load->library()方法来初始化用户代理类:

  1. $this->load->library('user_agent');

初始化之后,用户代理类的对象就可以这样访问:

  1. $this->agent

用户代理的定义

用户代理的名称定义在 application/config/user_agents.php 配置文件中。你也可以根据需要向相应的数组中添加你自己的用户代理。

例子

当用户代理类初始化之后,它会尝试判断正在访问你的站点的是 Web 浏览器,还是移动设备,或者是机器人。它还可以获取平台的相关信息。

  1. $this->load->library('user_agent');
  2.  
  3. if ($this->agent->is_browser())
  4. {
  5. $agent = $this->agent->browser().' '.$this->agent->version();
  6. }
  7. elseif ($this->agent->is_robot())
  8. {
  9. $agent = $this->agent->robot();
  10. }
  11. elseif ($this->agent->is_mobile())
  12. {
  13. $agent = $this->agent->mobile();
  14. }
  15. else
  16. {
  17. $agent = 'Unidentified User Agent';
  18. }
  19.  
  20. echo $agent;
  21.  
  22. echo $this->agent->platform(); // Platform info (Windows, Linux, Mac, etc.)

类参考

  • _class _CI_User_agent
    • isbrowser([$key = NULL_])

参数:

  1. - **$key** (_string_) -- Optional browser name返回:

TRUE if the user agent is a (specified) browser, FALSE if not返回类型:bool

判断用户代理是否为某个已知的 Web 浏览器,返回布尔值 TRUE 或 FALSE 。

  1. if ($this->agent->is_browser('Safari'))
  2. {
  3. echo 'You are using Safari.';
  4. }
  5. elseif ($this->agent->is_browser())
  6. {
  7. echo 'You are using a browser.';
  8. }

注解

这个例子中的 "Safari" 字符串是配置文件中定义的 browser 数组的一个元素,你可以在application/config/user_agents.php 文件中找到它,如果需要的话,你可以对其进行添加或修改。

  • ismobile([$key = NULL_])

参数:

  1. - **$key** (_string_) -- Optional mobile device name返回:

TRUE if the user agent is a (specified) mobile device, FALSE if not返回类型:bool

判断用户代理是否为某个已知的移动设备,返回布尔值 TRUE 或 FALSE 。

  1. if ($this->agent->is_mobile('iphone'))
  2. {
  3. $this->load->view('iphone/home');
  4. }
  5. elseif ($this->agent->is_mobile())
  6. {
  7. $this->load->view('mobile/home');
  8. }
  9. else
  10. {
  11. $this->load->view('web/home');
  12. }
  • isrobot([$key = NULL_])

参数:

  1. - **$key** (_string_) -- Optional robot name返回:

TRUE if the user agent is a (specified) robot, FALSE if not返回类型:bool

判断用户代理是否为某个已知的机器人,返回布尔值 TRUE 或 FALSE 。

注解

用户代理类只定义了一些常见的机器人,它并不是完整的机器人列表,因为可能存在上百个不同的机器人,遍历这个列表效率会很低。如果你发现某个机器人经常访问你的站点,并且它不在这个列表中,你可以将其添加到文件application/config/user_agents.php 中。

  • is_referral()

返回:TRUE if the user agent is a referral, FALSE if not返回类型:bool

判断用户代理是否为从另一个网站跳过来的(Referer 为另一个网站),返回布尔值 TRUE 或 FALSE 。

  • browser()

返回:Detected browser or an empty string返回类型:string

返回当前正在浏览你的站点的浏览器名称。

  • version()

返回:Detected browser version or an empty string返回类型:string

返回当前正在浏览你的站点的浏览器版本号。

  • mobile()

返回:Detected mobile device brand or an empty string返回类型:string

返回当前正在浏览你的站点的移动设备名称。

  • robot()

返回:Detected robot name or an empty string返回类型:string

返回当前正在浏览你的站点的机器人名称。

  • platform()

返回:Detected operating system or an empty string返回类型:string

返回当前正在浏览你的站点的平台(Linux、Windows、OSX 等)。

  • referrer()

返回:Detected referrer or an empty string返回类型:string

如果用户代理引用了另一个站点,返回 referrer 。一般你会像下面这样做:

  1. if ($this->agent->is_referral())
  2. {
  3. echo $this->agent->referrer();
  4. }
  • agent_string()

返回:Full user agent string or an empty string返回类型:string

返回完整的用户代理字符串,一般字符串的格式如下:

  1. Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2
  • acceptlang([$lang = 'en'_])

参数:

  1. - **$lang** (_string_) -- Language key返回:

TRUE if provided language is accepted, FALSE if not返回类型:bool

判断用户代理是否支持某个语言。例如:

  1. if ($this->agent->accept_lang('en'))
  2. {
  3. echo 'You accept English!';
  4. }

注解

这个方法一般不太可靠,因为有些浏览器并不提供语言信息,甚至在那些提供了语言信息的浏览器中,也并不一定准确。

  • languages()

返回:An array list of accepted languages返回类型:array

返回一个数组,包含用户代理支持的所有语言。

  • acceptcharset([$charset = 'utf-8'_])

参数:

  1. - **$charset** (_string_) -- Character set返回:

TRUE if the character set is accepted, FALSE if not返回类型:bool

判断用户代理是否支持某个字符集。例如:

  1. if ($this->agent->accept_charset('utf-8'))
  2. {
  3. echo 'You browser supports UTF-8!';
  4. }

注解

这个方法一般不太可靠,因为有些浏览器并不提供字符集信息,甚至在那些提供了字符集信息的浏览器中,也并不一定准确。

  • charsets()

返回:An array list of accepted character sets返回类型:array

返回一个数组,包含用户代理支持的所有字符集。

  • parse($string)

参数:

  1. - **$string** (_string_) -- A custom user-agent string返回类型:

void

解析一个自定义的用户代理字符串,而不是当前正在访问站点的用户代理。