From Joomla! Documentation


The "API16" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.


Returns the global JURI object, only creating it if it doesn't already exist.


static getInstance($uri= 'SERVER')
Parameter Name Default Value Description
$uri 'SERVER' $uri The URI to parse. [optional: if null uses script URI]


The URI object. 

Defined in



jimport( 'joomla.environment.uri' );

Source Body

public static function getInstance($uri = 'SERVER')
        static $instances = array();

        if (!isset($instances[$uri]))
                // Are we obtaining the URI from the server?
                if ($uri == 'SERVER')
                        // Determine if the request was over SSL (HTTPS).
                        if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) != 'off')) {
                                $https = 's://';
                        else {
                                $https = '://';

                         * Since we are assigning the URI from the server variables, we first need
                         * to determine if we are running on apache or IIS.  If PHP_SELF and REQUEST_URI
                         * are present, we will assume we are running on apache.
                        if (!empty($_SERVER['PHP_SELF']) && !empty ($_SERVER['REQUEST_URI']))
                                // To build the entire URI we need to prepend the protocol, and the http host
                                // to the URI string.
                                $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

                                // Since we do not have REQUEST_URI to work with, we will assume we are
                                // running on IIS and will therefore need to work some magic with the SCRIPT_NAME and
                                // QUERY_STRING environment variables.
                                // IIS uses the SCRIPT_NAME variable instead of a REQUEST_URI variable... thanks, MS
                                $theURI = 'http' . $https . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];

                                // If the query string exists append it to the URI string
                                if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
                                        $theURI .= '?' . $_SERVER['QUERY_STRING'];

                        // Now we need to clean what we got since we can't trust the server var
                        $theURI = urldecode($theURI);
                        $theURI = str_replace('"', '&quot;',$theURI);
                        $theURI = str_replace('<', '&lt;',$theURI);
                        $theURI = str_replace('>', '&gt;',$theURI);
                        $theURI = preg_replace('/eval\((.*)\)/', '', $theURI);
                        $theURI = preg_replace('/[\\\"\\\'][\\s]*javascript:(.*)[\\\"\\\']/', '""', $theURI);
                        // We were given a URI
                        $theURI = $uri;

                // Create the new JURI instance
                $instances[$uri] = new JURI($theURI);
        return $instances[$uri];


Code Examples