<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<title>CodeIgniter User Guide</title>

<style type='text/css' media='all'>@import url('../userguide.css');</style>
<link rel='stylesheet' type='text/css' media='all' href='../userguide.css' />

<script type="text/javascript" src="../nav/nav.js"></script>
<script type="text/javascript" src="../nav/prototype.lite.js"></script>
<script type="text/javascript" src="../nav/moo.fx.js"></script>
<script type="text/javascript">
window.onload = function() {
	myHeight = new fx.Height('nav', {duration: 400});
	myHeight.hide();
}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv='expires' content='-1' />
<meta http-equiv= 'pragma' content='no-cache' />
<meta name='robots' content='all' />
<meta name='author' content='Rick Ellis' />
<meta name='description' content='CodeIgniter User Guide' />

</head>
<body>

<!-- START NAVIGATION -->
<div id="nav"><div id="nav_inner"><script type="text/javascript">create_menu('../');</script></div></div>
<div id="nav2"><a name="top"></a><a href="javascript:void(0);" onclick="myHeight.toggle();"><img src="../images/nav_toggle.jpg" width="153" height="44" border="0" title="Toggle Table of Contents" alt="Toggle Table of Contents" /></a></div>
<div id="masthead">
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td><h1>CodeIgniter User Guide Version 1.5.3</h1></td>
<td id="breadcrumb_right"><a href="../toc.html">Table of Contents Page</a></td>
</tr>
</table>
</div>
<!-- END NAVIGATION -->


<!-- START BREADCRUMB -->
<table cellpadding="0" cellspacing="0" border="0" style="width:100%">
<tr>
<td id="breadcrumb">
<a href="http://www.codeigniter.com/">CodeIgniter Home</a> &nbsp;&#8250;&nbsp;
<a href="../index.html">User Guide Home</a> &nbsp;&#8250;&nbsp;
User Agent Class
</td>
<td id="searchbox"><form method="get" action="http://www.google.com/search"><input type="hidden" name="as_sitesearch" id="as_sitesearch" value="www.codeigniter.com/user_guide/" />Search User Guide&nbsp; <input type="text" class="input" style="width:200px;" name="q" id="q" size="31" maxlength="255" value="" />&nbsp;<input type="submit" class="submit" name="sa" value="Go" /></form></td>
</tr>
</table>
<!-- END BREADCRUMB -->

<br clear="all" />


<!-- START CONTENT -->
<div id="content">


<h1>User Agent Class</h1>

<p>The User Agent Class provides functions that help identify information about the browser, mobile device, or robot visiting your site.
In addition you can get referrer information as well as language and supported character-set information.</p>

<h2>Initializing the Class</h2>

<p>Like most other classes in CodeIgniter, the User Agent class is initialized in your controller using the <dfn>$this->load->library</dfn> function:</p>

<code>$this->load->library('user_agent');</code>
<p>Once loaded, the object will be available using: <dfn>$this->agent</dfn></p>

<h2>User Agent Definitions</h2>

<p>The user agent name definitions are located in a config file located at: <dfn>application/config/user_agents.php</dfn>.  You may add items to the
various user agent arrays if needed.</p>

<h2>Example</h2>

<p>When the User Agent class is initialized it will attempt to determine whether the user agent browsing your site is
a web browser, a mobile device, or a robot.  It will also gather the platform information if it is available.


<code>
$this->load->library('user_agent');<br />
<br />
if ($this->agent->is_browser())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent  = $this->agent->browser().' '.$this->agent->version();<br />
}<br />
elseif ($this->agent->is_robot())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->robot();<br />
}<br />
elseif ($this->agent->is_mobile())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = $this->agent->mobile();<br />
}<br />
else<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;$agent = 'Unidentified User Agent';<br />
}<br />
<br />
echo $agent;<br />
<br />
echo $this->agent->platform(); // Platform info (Windows, Linux, Mac, etc.)
</code>




<br />
<h1>Function Reference</h1>


<h2>$this->agent->is_browser()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known web browser.</p>

<h2>$this->agent->is_mobile()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known mobile device.</p>

<h2>$this->agent->is_robot()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent is a known robot.</p>

<p class="important"><strong>Note:</strong>&nbsp; The user agent library only contains the most common robot
definitions.  It is not a complete list of bots. There are hundreds of them so searching for each one would not be
very efficient. If you find that some bots that commonly visit your site are missing from the list you can add them to your
<dfn>application/config/user_agents.php</dfn> file.</p>

<h2>$this->agent->is_referral()</h2>
<p>Returns TRUE/FALSE (boolean) if the user agent was referred from another site.</p>


<h2>$this->agent->browser()</h2>
<p>Returns a string containing the name of the web browser viewing your site.</p>

<h2>$this->agent->version()</h2>
<p>Returns a string containing the version number of the web browser viewing your site.</p>

<h2>$this->agent->mobile()</h2>
<p>Returns a string containing the name of the mobile device viewing your site.</p>

<h2>$this->agent->robot()</h2>
<p>Returns a string containing the name of the robot viewing your site.</p>

<h2>$this->agent->platform()</h2>
<p>Returns a string containing the platform viewing your site (Linux, Windows, OS X, etc.).</p>

<h2>$this->agent->referrer()</h2>
<p>The referrer, if the user agent was referred from another site. Typically you'll test for this as follows:</p>

<code> if ($this->agent->is_referral())<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo $this->agent->referrer();<br />
}</code>


<h2>$this->agent->agent_string()</h2>
<p>Returns a string containing the full user agent string.  Typically it will be something like this:</p>

<code>Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.0.4) Gecko/20060613 Camino/1.0.2</code>


<h2>$this->agent->accept_lang()</h2>
<p>Lets you determine if the user agent accepts a particular language. Example:</p>

<code>if ($this->agent->accept_lang('en'))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo 'You accept English!';<br />
}</cod>

<p class="important"><strong>Note:</strong> This function is not typically very reliable
since some browsers do not provide language info, and even among those that do, it is not always accurate. </p>



<h2>$this->agent->accept_charset()</h2>
<p>Lets you determine if the user agent accepts a particular language. Example:</p>

<code>if ($this->agent->accept_charset('utf-8'))<br />
{<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo 'You browser supports UTF-8!';<br />
}</cod>

<p class="important"><strong>Note:</strong> This function is not typically very reliable
since some browsers do not provide character-set info, and even among those that do, it is not always accurate. </p>



</div>
<!-- END CONTENT -->


<div id="footer">
<p>
Previous Topic:&nbsp;&nbsp;<a href="uri.html">URI Class</a>
&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="#top">Top of Page</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
<a href="../index.html">User Guide Home</a>&nbsp;&nbsp;&nbsp;&middot;&nbsp;&nbsp;
Next Topic:&nbsp;&nbsp;<a href="validation.html">Validation Class</a>
<p>
<p><a href="http://www.codeigniter.com">CodeIgniter</a> &nbsp;&middot;&nbsp; Copyright &#169; 2007 &nbsp;&middot;&nbsp; <a href="http://ellislab.com/">Ellislab, Inc.</a></p>
</div>

</body>
</html>