From Joomla! Documentation


The "API15" 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 a reference to a global JURI object, only creating it if it doesn't already exist.

[<! removed edit link to red link >]

<! removed transcluded page call, red link never existed >


& 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[edit]



jimport( 'joomla.environment.uri' );

Source Body[edit]

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];

[<! removed edit link to red link >] <! removed transcluded page call, red link never existed >


Code Examples[edit]